我试图了解gl_Position
如何成为屏幕中的(x,y)位置以及如何将其转换回来(例如,获取鼠标点击的位置)
例如,假设我有以下3D矢量:
V = [ -70.0, 0.27, -30.0, 1.0 ]
根据视角计算的我的MVP(模型 - 视图 - 投影)是
M = [[-1.34, 0.0 , 0.0 , 0.0 ],
[ 0.0, 1.26, 1.28, 0.40 ],
[ 0.0, -0.72, 0.71, 141.54 ],
[ 0.0, -0.71, 0.70, 142.13 ]]
如果我将两者相乘,我会得到:
M * V = [ 94.11, -37.53, 120.079, 120.86 ]
在gl_Position
中设置此值后,向量将在窗口中的以下位置绘制(我的窗口为800x600):
P = [ 702, 374 ]
我能理解的是: M * V
如何成为P
?我知道这与w
中的V
有关,但我无法找到与P
得到相同结果的计算。
第二个问题是,如何在P
中转换V
,以捕捉鼠标点击的3D位置。
答案 0 :(得分:3)
从M * V到P,您需要将M * V除以最后一个(w)分量(称为透视分割),然后应用视口转换以获得实际像素。看看these excellent explanations.
如果没有更深入的信息,可以使用gluUnproject获得,从数学上来说,从2d回到3d是不可能的。 Look here了解如何使用它的信息。但要注意,根据您的使用情况,每秒频繁使用此方法可能会非常慢。不过,这可能会让你了解这一切是如何运作的。