我目前正在嘗試將屏幕空間中的觸摸轉換爲我正在處理的2D遊戲在worldspace中的位置。iPhone操作系統 - 屏幕空間轉換爲世界空間
我正在使用的視圖具有與屏幕幾乎相同的座標系,基本上,如果有人觸摸屏幕上的x = 345,y = 500像素,它將在視圖上相同,儘管y會向後,因爲opengl使用左下角0而不是左上角。
「攝像頭」在0,0,0向下看負Z.我說「相機」,因爲我還沒有編碼一個。現在我只是將每個精靈Z翻譯爲-100。
的僞代碼迄今我已經試過(和數學一直雙重檢查)是這樣的 -
// scale the screen point into a value from 0 to 1
point = { screenPoint.x/screenWidth, screenPoint.y/screenHeight, -100, 1 }
// doing a full inverse here, not just swapping rows and cols
out = Inverse(viewProjection) * point
inverseW = 1/out.w
finalWorldCoord = out * inverseW
的問題是,這是給我的值是比他們應該是什麼樣的方式少,我不知道爲什麼。
這是在iPhone OS 3.2上的OpenGL ES 2.0。
有沒有人知道這樣做的正確方法?
你能告訴你的OpenGL初始化代碼? – 2010-02-22 21:42:57
不要將你的z設置爲-100。投影矩陣將實際的Z值轉換爲介於0和1之間的值,其中0爲近平面,1爲遠平面。嘗試將其設置爲0,那麼應該給你你想要的。 – Sekhat 2010-02-24 09:38:56