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