如何通过调用gluUnproject两次(不使用gluUnProject)从场景坐标获取深度值

时间:2017-02-03 22:22:20

标签: c++ opengl

this帖子中。第二个答案表明:

  

解决方案2调用gluUnproject两次,一次调用clipZ = -1和   另一个clipZ = 1,你得到两点(世界空间)。同   这两点你得到一个光线,你可以使用一些光线投射算法   计算鼠标坐标。

但不幸的是,在提出建议后没有解释。 还有一个thread解释了可以通过两次调用gluUnproject获得方向。获得方向对我来说很有意义,但我的问题是如何通过两次调用gluUnProject来获取深度信息?

1 个答案:

答案 0 :(得分:2)

您无法获得深度信息。你只有一个X和一个Y,但要取消项目,你需要一个Z.没有任何魔法可以给它。而是试图推断它。

撤消视口转换后,NDC中有X,Y。什么Z?使用z1= 1和X,Y。取消项目。现在你在世界坐标中有一个点P1。重复Unproject,但这次是z2= -1。你得到P2。可能你必须处理'' w'坐标。请记住,您可以在除以w后提取3D坐标。在齐次坐标中,w是比例因子。

使用P1和P2,您可以自己找到P1P2线与您的模型之间的交点。

z= -1, 1是NDC中最分离的坐标,因此计算结果更准确。