Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 应用基于顶点着色器的几何体变形的3D场景通用拾取解决方案_Opengl_Vertex Shader_Openscenegraph_Picking - Fatal编程技术网

Opengl 应用基于顶点着色器的几何体变形的3D场景通用拾取解决方案

Opengl 应用基于顶点着色器的几何体变形的3D场景通用拾取解决方案,opengl,vertex-shader,openscenegraph,picking,Opengl,Vertex Shader,Openscenegraph,Picking,我正在尝试为3D场景实现一种导航技术(在OpenSceneGraph和OpenGL中)。除此之外,用户应该能够单击屏幕上的场景对象以向其移动 导航技术应集成到另一个项目中,该项目使用顶点着色器将全局变形应用于场景几何体。问题是:由于几何体是使用顶点着色器变形的,因此无法直接将鼠标光标位置取消投影到用户实际选择的点的世界坐标。但在我的导航技术中,我需要这些坐标来执行适当的相机移动 执行此取消投影的一种方法是修改顶点着色器(用于变形),使其也在单独的纹理中存储顶点的原始位置和法线。之后,可以在鼠标位

我正在尝试为3D场景实现一种导航技术(在OpenSceneGraph和OpenGL中)。除此之外,用户应该能够单击屏幕上的场景对象以向其移动

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

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

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


所以这里有个问题:OpenScEngI图或OpenGL中有没有我至今没有考虑过的特性?任何允许我获得片段的世界坐标的东西,独立于顶点着色器编码器?

好的,您可以随时执行OpenGL选择操作:

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

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