2009-05-26 111 views
7

我正在做一個幕後3D模擬,同時在我的2D等距引擎中渲染世界。我之前從未做過等距引擎,而且我的矩陣數學一般都很生鏽,所以我遇到了問題。將屏幕上的點投影回等軸投影的世界

我有一個投影矩陣,在其最簡單的形式是這樣的:

0.7  0.35  0 
0  -0.87  0 
-0.71  0.35  1 

一對夫婦的跡象彈起,因爲我的發動機座標系是在左上角0,0,與+ X到向右/向東和+ Z向南。現在

,那反是:

1.4080 0.5670 0.0000 
0.0000 -1.1490 0.0000 
1.0000 0.8050 1.0000 

現在,這些矩陣大多工作。

例如

WC: 500,0,500 = 屏幕: -1.44,350,500(X和Y是正確的)

WC: 0,0,500 = 屏幕: -355,175,500(X和Y是正確再次)

但是,現在如果你需要走另一條路,你不再有方便的Z值,所以

屏幕: -1.44,350,0 = WC: -2,-402.97,0(。所以,垃圾)

及其它更多 - 只要我不再有Z值,我無法從屏幕座標中找回世界座標。

這裏有什麼解決方法?

編輯

我要指出的是,unproject的一點是要獲得鼠標選擇一個射線..

看起來這只是我自己在做什麼這是擰的誤解我在這裏。

+0

任何有關你如何到達這裏的參考將他非常有幫助!我試圖找出一些與我自己相似的東西 - 幕後3D渲染,同時呈現2D。 – 2012-04-16 20:20:18

回答

8

正如你發現的,你轉換回3D空間需要某種Z座標來完成任何意義。

我建議你做反向轉換兩次。一旦在屏幕附近有一個Z座標(最接近觀察者),並且在3D場景的背面有一個Z座標。這兩個3D點會給你一條3D線,這將佔據2D點後面的所有位置。

2

你不行。你投射到丟失信息的屏幕上。

如果你仔細想想,幾個3d座標會被投影到屏幕上的同一個點上,並且知道屏幕座標不足以檢索原始座標。

看着你的屏幕座標,你給他們所有的z值0.這意味着你的投影矩陣的最後一列應該全部爲零,使得矩陣不可逆。

2

屏幕上的每個像素代表從旁觀者的眼睛到屏幕後面的虛擬3D世界的一條線。爲了獲得3D座標,必須將該線與任何可能潛藏在該世界中的物體相交。