5

我正在尝试实现 3D 场景的导航技术(在带有 OpenGL 的 OpenSceneGraph 中)。除其他外,用户应该能够点击屏幕上的场景对象以向其移动。

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

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

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

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

4

1 回答 1

0

好吧,您总是可以进行 OpenGL 选择操作: http ://www.glprogramming.com/red/chapter13.html

或者,您可以光栅化到用户单击的非常小的 (1px*1px) 帧缓冲区,读回 z 缓冲区并将您获得的 Z 值取消投影到世界空间中。

于 2013-01-06T23:46:56.723 回答