2012-01-08 65 views
2

我正在使用glm數學庫來解決以下問題:將2D屏幕位置轉換爲3D世界空間。與GLM :: unProject在這種情況下,我希望worldPos爲(0,0將2D屏幕位置放入3D世界空間

float screenW = 800.0f; 
    float screenH = 600.0f; 
    glm::vec4 viewport = glm::vec4(0.0f, 0.0f, screenW, screenH); 
    glm::mat4 tmpView(1.0f); 
    glm::mat4 tmpProj = glm::perspective(90.0f, screenW/screenH, 0.1f, 100000.0f); 
    glm::vec3 screenPos = glm::vec3(0.0f, 0.0f, 1.0f); 
    glm::vec3 worldPos = glm::unProject(screenPos, tmpView, tmpProj, viewport); 

現在:

在試圖跟蹤問題,我簡單的代碼如下1)。然而,它正在通過(127100.12,-95325.094,-95325.094)。

我誤解了glm :: unProject應該做什麼?我追蹤了這個功能,它似乎工作正常。

回答

3

screenPos中的Z分量對應於深度緩衝區中的值。所以0.0f是近夾平面,1.0f是遠夾平面。

如果你想找到世界POS這是一個單位離屏幕,你可以重新調整向量:

worldPos = worldPos/(worldPos.z * -1.f); 

還要注意的0,0 screenPos指定的左下角屏幕,而在worldPos 0,0是屏幕的中心。所以0,0,1應該給你-1.3333,-1,-1和400,300,1應該給你0,0,-1。

+0

具有完美的感覺。謝謝 – JimFing 2012-01-09 20:57:23

相關問題