【发布时间】:2009-05-07 02:25:42
【问题描述】:
我有一个简单的实体建模应用程序,我想在其中实现几种“导航模式”,即用户通过 3d 空间导航相机的方式。其中之一是在 SketchUp、Blender 等中使用的无处不在的“拖动和平移/旋转”;我还想实现与我的特定应用程序更相关的东西。具体来说,我想实现一种模式,其中相机漂浮在被建模对象(建筑物)上方的“环”上,并始终注视模型的中心;这样,用户可以轻松地围绕对象“转圈”,这是我的应用程序中的常见操作。
所以,我要做的是在我的视图中渲染建筑物,并在视图的右上角显示一个圆环,圆环上有一个小球体来表示相机位置。圆环中会有一个指北针,用户可以通过拖动球体来围绕模型对象拖动相机;移动球体将重新定位相机并重绘场景。
看起来我应该做的是:渲染“主视图”,即建筑物;然后将环面和球体(具有不同的透视设置和光照)渲染到屏幕外缓冲区,然后将其从那里传送到我的主视图。
然后我开始进行命中测试。我想检测用户是点击球体还是圆环;根据我对 OpenGL 拾取的理解(这似乎是一个很难的主题:/),所有拾取方法仅适用于在一个“场景”中进行选择。除此之外,很明显,我仍然想检测建筑模型中的“正常”拾取操作。
所以,我的问题:
- 如何渲染到屏幕外缓冲区并进入另一个 OpenGL 上下文(像圆环中心一样使用 alpha 混合和透明度)?
- 如何在所述场景中进行命中测试?
【问题讨论】:
标签: opengl