Opengl es OpenGL自定义导航/选择

Opengl es OpenGL自定义导航/选择,opengl-es,webgl,Opengl Es,Webgl,我有一个情况,我真的不知道我能处理。我有一个大约20k个顶点的openGl对象,我需要为用户提供选择这些顶点中任何一个的可能性(假设误差最小)。现在我要做的是: 在对象的3D画布旁边,我还为用户提供了3个由平面x=0完成的“切片”;y=0,z=0。比如说,对于一个球体来说,最简单的例子是3个圆,对应于“切割”出一个维度。现在让我们以z=0为例。当用户点击一个点时,比如说(x_圆,y_圆),我想得到他点击的3d表示中的实际点。z当然是0,但我想不出一个方法来得到x和y。我可以很容易地翻译(x\u圈

我有一个情况,我真的不知道我能处理。我有一个大约20k个顶点的openGl对象,我需要为用户提供选择这些顶点中任何一个的可能性(假设误差最小)。现在我要做的是:

在对象的3D画布旁边,我还为用户提供了3个由平面x=0完成的“切片”;y=0,z=0。比如说,对于一个球体来说,最简单的例子是3个圆,对应于“切割”出一个维度。现在让我们以z=0为例。当用户点击一个点时,比如说(x_圆,y_圆),我想得到他点击的3d表示中的实际点。z当然是0,但我想不出一个方法来得到x和y。我可以很容易地翻译
(x\u圈,y\u圈)->(x\u屏幕,y\u屏幕)
,这将产生与在画布上单击这些坐标相同的结果,但我需要找到一种方法将其转换为三维视图中的(x,y,0)坐标


对于x=0,y=0,也需要做同样的事情,但我认为如果我能理解/实现z=0的方法,我可以或多或少地应用相同的解决方案,并在某个物体上增加旋转。如果有人能提供任何示例/代码,甚至数学方面的帮助,这将非常有帮助,因为目前我不确定如何继续。

当用户单击时,您可以使用GL.POINTS(具有一定大小,如果您愿意)将顶点渲染到屏幕外缓冲区,使用着色器将每个顶点的索引渲染到RGBA中。然后读取鼠标位置上的像素并查看它的索引。

需要取消投影屏幕坐标,为您提供场景中的视图坐标,然后找到从该点与光线相交(或接近阈值)的第一个顶点。所以在谷歌上要寻找的关键词是拾取、glunproject、线和点之间的距离等等。感谢您的输入。但从我看到的GlunProject变成了3d->3d。我真的只需要打开2d->2d,因为在屏幕上我只有x,y,在openGL坐标中,我已经知道我想要从平面z=0开始。我猜你仍然在思考2d。屏幕是接近Z缓冲区值的平面。因此,在视图空间中,Z=Zmin是屏幕平面。所以你在屏幕上x,y的点实际上是x,y,Zmin,在3D中。现在,您仍然需要确定光线的另一端应该在哪里,即鼠标光标指向场景的x、y、Z方向。可以通过应用视图矩阵的逆矩阵来执行此操作。