2012-09-03 82 views
-1

我正在調用gluUnProject(應用程序使用GLES20)。對於我的生活,我無法獲得我正在尋找的價值。gluUnProject - 無法獲得正確的值

我有一個對象在(-9,0,0),所以我需要gluUnProject的結果等於這個莫名其妙。相機位於(0,20,4),而近/遠平面距離爲(3,100)。我甚至嘗試在功能運行時打印出當前的矩陣(在這種情況下,屏幕上的像素位置是(160,345),這非常接近對象的位置):

win: (160,345,0.0) 
model: (1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0) 
viewport: (0, 0, 1280, 720) 
proj: (0.5625, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.020202, -1.0, 0.0, 0.0, -2.020202, 0.0) 

近平面:

obj: (-1.3333333, -0.041666687, -1.0, 1.0) 
final: (-1.3333333, -0.041666687, -1.0) 

遠平面:

obj: (-1.3333333, -0.041666687, -1.0, 0.00999999) 
final: (-133.33345, -4.1666727, -100.0001) 

我應該使用這裏的Z值計算的東西嗎?如果我提供的值大約在0.864左右,我可以得到大約正確的X值(-9),這對我來說並不合適。在任何計算中我都找不到這個值。我一遍又一遍地玩弄數字,不能一起工作。我在這裏錯過了什麼?

回答

0

你不能用gluUnProject做到這一點。

第三個參數是所期望的點的深度,在屏幕空間(0和1之間,即,0映射近平面和1名映射到遠平面)

由於您不知道這個值,你不能使用這個函數。

如果您嘗試實施揀選,則應手動啓動射線並測試與對象的交點(或使用碰撞/物理引擎爲您執行此操作)。

+0

我不能計算深度?我的近平面是3,我的遠平面是100,我知道所有物體的確切位置,因此我可以計算從一個物體到任何其他物體的距離,以及距離遠近平面的距離。 。 – Brad

+0

你在找什麼?如果你想要物體與相機的距離,只要做(v1-v2).length()... – Calvin1602

+0

我想我是在假設我可以計算一個物體的深度並測試它,而不是測試許多深度以檢查交叉點。所以現在我只是調用一些不同的深度並檢查交叉點。 – Brad

0

這裏是我的unproject

glm::vec3 World::Unproject(glm::vec3 v){ 
    glm::mat4 pv = ProjectionMatrix * ViewMatrix; 
    glm::mat4 inv = glm::inverse(pv); 
    glm::vec4 v4(v, 1.f); 
    glm::vec4 r4 = inv * v4; 
    glm::vec3 r(r4.x/r4.w, r4.y/r4.w, r4.z/r4.w); 
    return r; 
} 

v(x,y,1.0)

-1.0 < x,y < 1.0

相機,Unproject(V) - 定義射線 可以計算距離,光線