2014-09-05 31 views
2

我想知道如何做一個gl_Position成爲(X,Y)在屏幕上的位置,我怎麼能變換回來(讓鼠標點擊的位置,例如)。gl_Position如何在窗口中變成(x,y)位置?

例如,假設我有以下的三維矢量:

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後,向量我■在窗口下面的位置繪製(我的窗口是800×600):

P = [ 702, 374 ] 

我無法理解的是:如何M * V成爲P?我明白,這事做與Vw,但我不能找到一個計算從哪裏獲得相同的結果P。例如,如何將P轉換爲V,以捕捉鼠標點擊的3D位置。

回答

2

從M * V到你需要除以最後(W)成分,被稱爲透視分割M * V,然後應用視口變換得到實際像素P.看看these excellent explanations.

要從2d恢復到3d在數學上是不可能的,沒有進一步的深度信息,這可能使用gluUnproject獲得。有關如何使用該信息的信息,請參閱Look here。但是,要注意,根據您的用例,每秒頻繁使用此方法可能會非常緩慢。儘管如此,這可能會給你一個關於如何運作的想法。

+0

非常感謝您的文章。通過這樣做'與'M * V'結果N =(X,Y,Z)/ w',我能夠得到最終的窗口位置(考慮視口'T =(X,Y,W,H) ')用'win_x =(TW/2.0)* NX +(TX + TW/2.0)'和'win_y =釷 - ((TH/2.0)* NY + N(泰 - +的Th/2.0))'。 – 2014-09-05 19:17:06

相關問題