理论教育 VegaPrime:定义订阅者类

VegaPrime:定义订阅者类

时间:2023-11-25 理论教育 版权反馈
【摘要】:关于头文件,除了引入Vega Prime 相关的头文件外,还需要使用OpenGL 相关的内容。除了重载notify 函数之外,还定义了一个变量m_objectPosition 来储存矩阵。首先,对现有元素进行了压栈操作:接着,获取视点矩阵:然后,读取数据:接着,进行了视角矩阵转换:然后,利用OpenGL 代码进行了绘制,包括线段、半球、圆柱体:最后,进行了出栈操作:具体详细代码如图8.2.1所示。

VegaPrime:定义订阅者类

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 定义订阅类

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈