使用 GLSL 通过鼠标单击确定 3D 位置

Using GLSL to determine 3D position from mouse click

我想知道从 2D 位置获取 3D 位置的问题。在我的应用程序中,我设置了所有内容(mvp 矩阵、鼠标的屏幕位置)。

我们通过以下变换从 3D 变为 2D。

gl_Position =投影*视图*模型*顶点;

然后将这些剪辑坐标除以w为NDC,再转换为屏幕坐标。我想做相反的事情(鼠标点击 3D)。对于 x 和 y,筛选到 NDC 很容易。但是z数据丢失了。

据我所知,恢复 3D 数据的唯一方法是使用基于树的空间数据结构的光线投射,也许 CUDA/OpenCL。但我不确定。还有别的办法吗?鉴于我们有 MVP 矩阵和屏幕坐标,是否有恢复 3D 位置的方法?

读取鼠标指针位置的 deph 值 (glReadPixels(…, GL_DEPTH,…)) 并将其用于恢复 Z。或者将光线投射到场景结构中。根据您的应用程序,任何一个都可能是更好的解决方案。