理论教育 理解VegaPrime与OpenGL混合编程

理解VegaPrime与OpenGL混合编程

时间:2023-11-25 理论教育 版权反馈
【摘要】:要在Vega Prime 中使用OpenGL,必须要对Vega Prime 和OpenGL 混合编程有比较清楚的认识。理解起来,其实Vega Prime 和OpenGL的混合编程是很简单的,问题的关键是:对Vega Prime的层次结构和底层OpenGL 接口的熟悉程度如何?对OpenGL的流程和机制的掌握程度如何?是不是真的需要在Vega Prime 中使用OpenGL?第三个要解决的问题是如何保留和恢复Vega Prime的状态。对于第二个问题,首先搞清楚Vega Prime 和OpenGL的差异,观察方式不同,Vega Prime默认视线是沿着y轴的,OpenGL 是沿z轴。

理解VegaPrime与OpenGL混合编程

要在Vega Prime 中使用OpenGL,必须要对Vega Prime 和OpenGL 混合编程有比较清楚的认识。

理解起来,其实Vega Prime 和OpenGL的混合编程是很简单的,问题的关键是:

(1)对Vega Prime的层次结构和底层OpenGL 接口的熟悉程度如何?

(2)对OpenGL的流程和机制的掌握程度如何?

(3)是不是真的需要在Vega Prime 中使用OpenGL?

现在,这3个问题已经不是问题了。Vega Prime 和OpenGL的混合编程只是一个经验的问题。

第一个要解决的就是接口,也就是说OpenGL 代码在哪里执行的问题。(www.daowen.com)

第二个要解决的问题是两者之间的差异如何统一,也就是如何让OpenGL 画的东西能在Vega Prime 中正常实现。

第三个要解决的问题是如何保留和恢复Vega Prime的状态。

对于第一个问题,首先要明白,在Vega Prime 中需要主线程开启的同时,还开启了其他一些线程,如cull,draw 等。OpenGL的代码只能在draw 这个线程里执行,那么问题又来了,draw 线程的接口在哪里呢?这是问题的本质。draw 线程的接口只有一个,因为Vega Prime所有的事件跟 draw 有关的就是:EVENT_PRE_DRAW 和 EVENT_POST_DRAW,那就是vpChannel的EVENT_POST_DRAW,在vpChannel::subscriber 里写OpenGL 代码就行了,这是第一个问题。

对于第二个问题,首先搞清楚Vega Prime 和OpenGL的差异,观察方式不同,Vega Prime默认视线是沿着y轴的,OpenGL 是沿z轴。还有就是,用Vega Prime 中的视点(也就是vpObserver的6个自由度)的位置来更新OpenGL的视点和用Vega Prime的视锥体(也就是平头截体)更新OpenGL的视锥体,这两个信息可以通过vpChannel(从vrChannel 继承来的)的几个函数得到,具体代码在下一节演示。

对于第三个问题,可以直接用vrDrawContext->pushElment 和popElemt()来解决。

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

我要反馈