2012-02-03 125 views
1

我在用OpenGLES的包裝紙寫2D遊戲。有一個相機瞄準一堆紋理,這是遊戲的精靈。用戶應該能夠通過在屏幕上移動手指來移動視圖。問題是,相機距離紋理約100個單位,所以當手指滑過屏幕以平移相機時,由於視差效應,精靈比手指移動得更快。所以基本上,我需要將2D屏幕座標轉換爲距離特定z距離的三維座標(在我的情況下爲100,因爲這是紋理的距離)。將2D屏幕座標轉換爲C++中的3D空間座標?

C#中有一些"Unproject"函數,但我使用C++,所以我需要這個函數背後的數學。我對3D的東西非常陌生,在數學方面我非常不好,所以如果你能解釋你喜歡解釋給一個10歲的孩子,我會非常感激。

如果我能做到這一點,我可以以這樣的速度平移相機,所以它看起來像遙遠的精靈用用戶的手指平移。

+1

一些10歲的孩子數學能力很強:P – 2012-02-03 06:47:45

回答

0

找到在答案: Wikipedia

它具有以下化學式:
enter image description here

爲了確定哪個屏幕的x座標對應於在Ax上點,AZ乘以點由座標

其中 Bx是屏幕x座標
Ax是模型x座標
Bz是焦距 - 從相機中心到圖像平面的軸向距離
Az是主體距離。

+0

儘管這在理論上可以回答這個問題,但我們希望您在答案中包含鏈接文章的基本部分,並提供[鏈接供參考](http ://meta.stackexchange.com/q/8259)。如果做不到這一點,答案就會受到鏈接腐敗的威脅。 – Kev 2012-02-05 20:07:44

0

一般來說,你將不得不縮放你的手指移動距離,以在遠離的平面(z單位)使用它。

即它的l單位是手指的移動量,如果你想找到z單位的距離,長度l'= l/z 但是,請檢查效果並調整l'(雙/減半等)以獲得所需的效果。

相關問題