gl_Position如何成为窗口中的(x,y)位置?

时间:2014-09-05 13:37:20

标签: opengl

我试图了解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位置。

1 个答案:

答案 0 :(得分:3)

从M * V到P,您需要将M * V除以最后一个(w)分量(称为透视分割),然后应用视口转换以获得实际像素。看看these excellent explanations.

如果没有更深入的信息,可以使用gluUnproject获得,从数学上来说,从2d回到3d是不可能的。 Look here了解如何使用它的信息。但要注意,根据您的使用情况,每秒频繁使用此方法可能会非常慢。不过,这可能会让你了解这一切是如何运作的。