OpenGL的代码只能在draw 这个线程里执行, draw 线程的接口只有一个,因为Vega Prime所有的事件跟 draw 有关的就是:EVENT_PRE_DRAW 和 EVENT_POST_DRAW,那就是vpChannel的EVENT_POST_DRAW,在vpChannel::subscriber 里写OpenGL 代码。
所以,从vpChannel::subscriber 类里继承订阅类类Mysubscriber,进行OpenGL 绘制。
关于头文件,除了引入Vega Prime 相关的头文件外,还需要使用OpenGL 相关的内容。具体代码如下:
关于定义的订阅类Mysubscriber,它继承于vpChannel::subscriber 类。除了重载notify 函数之外,还定义了一个变量m_objectPosition 来储存矩阵。其定义如下代码:
并在构造函数中进行了初始化。
另外有两个notify 函数,一个是:
virtual void notify(vsChannel::Event,const vsChannel *,vsTraversalCull *)
对于这个与裁剪相关的函数,并没有过多的功能代码。
另一个是:
void notify(vsChannel::Event event,const vsChannel *channel,vrDrawContext *context)
对于这个与绘制相关的函数则是应该重点研究的。 首先,对现有元素进行了压栈操作:
接着,获取视点矩阵:
(www.daowen.com)
然后,读取数据:
接着,进行了视角矩阵转换:
然后,利用OpenGL 代码进行了绘制,包括线段、半球、圆柱体:
最后,进行了出栈操作:
具体详细代码如图8.2.1所示。
图8.2.1 定义订阅类
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。