2013-01-06 22 views
4

我正在尝试为3D场景(OpenSceneGraph与OpenGL)实现导航技术。除此之外,用户应该能够点击屏幕上的一个场景对象来朝它移动。适用于基于顶点着色器的几何变形的3D场景的通用拾取解决方案

导航技术应该集成到另一个项目中,该项目使用顶点着色器将全局变形应用到场景几何。问题在于:由于几何体是使用顶点着色器变形的,因此将鼠标光标位置取消投影到用户实际选择的位置的世界坐标并不是直接的。但我需要这些坐标来执行我的导航技术中的适当相机移动。

执行这种非投影的一种方法是修改顶点着色器(用于变形),让它也将顶点的原始位置和法线存储在单独的纹理中。之后可以在鼠标位置读取这些纹理以获得所需的值。

现在,正如我所说,顶点着色器属于另一个我实际上不想触摸的项目。我的导航技术的一个目标是尽可能通用,以便轻松集成到其他项目中。

所以,这里是一个问题:OpenSceneGraph或OpenGL中有什么功能到目前为止我没有考虑过吗?任何可以让我获得片段的世界坐标的独立于顶点着色器编码器的东西?

回答

0

嗯,你总是可以做一个OpenGL选择操作: http://www.glprogramming.com/red/chapter13.html

或者,您可以栅格化到用户点击一个非常小(1像素* 1像素)帧缓冲区,读回z缓冲区和unproject的你进入世界空间的Z值。

+0

你所描述的是在3D场景中选择“正常”的方法。我的问题是顶点着色器中的几何体发生变形,这意味着您在屏幕上看到的几何体的位置不是它在世界坐标系中的实际位置。 –

相关问题