我想知道从2D获取3D位置的问题。在我的应用程序中,我设置了一切(mvp矩阵,鼠标的屏幕位置)。
我们通过以下转换从3D转到2D。
gl_Position = projection * view * model * vertex;
然后将这些剪辑坐标除以w到NDC,然后转换为屏幕坐标。我想反过来(鼠标点击3D)。对于x和y,屏幕到NDC很容易。但是z数据丢失了。
据我所知,恢复3D数据的唯一方法是使用光线投射和基于树的空间数据结构,也许是CUDA / OpenCL。但我不确定。还有其他方法吗?有没有一种方法来恢复3D位置,因为我们有MVP矩阵和屏幕坐标?
答案 0 :(得分:1)
读取鼠标指针位置的deph值(glReadPixels(...,GL_DEPTH,...))并使用它来恢复Z.或者将光线投射到场景结构中。根据您的应用程序,任何一个可能是更好的解决方案。