Fra*_*gel 5 opengl openscenegraph picking vertex-shader
我正在尝试为 3D 场景实现导航技术(在 OpenSceneGraph 中使用 OpenGL)。除其他事项外,用户应该能够点击屏幕上的场景对象以朝它移动。
导航技术应集成到另一个项目中,该项目使用顶点着色器将全局变形应用于场景几何体。这就是问题所在:由于使用顶点着色器使几何体变形,因此将鼠标光标位置取消投影到用户实际选择的地点的世界坐标并不是直接的。但是我需要这些坐标来在我的导航技术中执行正确的相机移动。
执行这种非投影的一种方法是修改顶点着色器(用于变形),让它也将顶点的原始位置和法线存储在单独的纹理中。之后可以在鼠标位置读取这些纹理以获得所需的值。
现在,正如我所说,顶点着色器属于另一个我实际上不想触及的项目。我的导航技术的一个目标是尽可能通用,以便轻松集成到其他项目中。
那么问题来了:到目前为止,OpenSceneGraph 或 OpenGL 中是否有任何我没有考虑的功能?有什么可以让我独立于顶点着色器编码器获得片段的世界坐标的吗?
小智 0
好吧,你总是可以进行 OpenGL 选择操作: http://www.glprogramming.com/red/chapter13.html
或者,您可以光栅化到用户单击的非常小的 (1px*1px) 帧缓冲区,读回 z 缓冲区并将您获得的 Z 值取消投影到世界空间中。