2012-03-31 49 views
1

我想要做的具體名稱是「unproject」=將屏幕點映射到3D世界。將屏幕點映射到3D真實位置

所以我發現這個網站它有簡單的公式用於映射三維座標轉換爲2D畫面:

http://www.petesqbsite.com/sections/tutorials/tuts/perspective.html

我已經廣泛使用這些公式,但現在我希望能夠與互動通過懸停在屏幕上的3D世界。

我不想讓2D座標與3D對象相關聯,而是想找到一個將屏幕指向真實的方程。我試着對以下2個方程進行逆向工程,試圖找到答案:

screenPoint.x = (int) ((eye.z * (realPoint.x-eye.x))/(eye.z + realPoint.z) + eye.x); 
screenPoint.y = 480 - (int) ((eye.z * (realPoint.y-eye.y))/(eye.z + realPoint.z) + eye.y); 

但是我沒有成功(在數學上不可能)。

任何幫助將不勝感激!

謝謝!

+0

這是不可能的在一般情況下(投影是不可逆的)。但在簡單情況下,您可以使用光線追蹤來確定將哪些對象投影到給定像素上。或者,您可以在生成2D圖像時預先生成信息。 – 2012-03-31 19:09:18

+0

所以你說的光線追蹤我可以,給出: -camera座標 - 屏幕平面的等效 - 在3D世界中的某些平面(xz)平面的等效 從屏幕到平面的映射點3D世界? 我只是想在我懸停在xz平面上時點亮。 – user1170679 2012-03-31 19:45:06

+0

我找到了我的問題的答案:http://stackoverflow.com/questions/9971701/unprojecting-2d-screen-coordinates-to-3d-coordinates – user1170679 2012-04-02 09:57:21

回答

0

我曾經有過類似的問題。我做的是我發現了在opengl中使用的視場,並計算出屏幕上1個像素= 1個opengl的Z距離。現在,無論何時我指向屏幕上的任何位置,我都有屏幕上鼠標的X和Y座標以及基於FOV早先計算的Z座標。我現在有一個確定的三維座標。然後,我從攝像機中「畫出」一條想象線,看看它碰到了什麼。我知道這不是一個簡單的答案,但你所問的是不可能的。這裏有一個方法可以做到這一點詭計