在this帖子中。第二个答案表明:
解决方案2调用
gluUnproject
两次,一次调用clipZ = -1
和 另一个clipZ = 1
,你得到两点(世界空间)。同 这两点你得到一个光线,你可以使用一些光线投射算法 计算鼠标坐标。
但不幸的是,在提出建议后没有解释。
还有一个thread解释了可以通过两次调用gluUnproject
获得方向。获得方向对我来说很有意义,但我的问题是如何通过两次调用gluUnProject
来获取深度信息?
答案 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中最分离的坐标,因此计算结果更准确。