2009-02-26 133 views
3

我使用反向透視投影

worldview_inverse * (projection_inverse * vector) 

變換屏幕空間座標變換爲世界空間座標。 我認爲

(x,y,1,1) 

將轉化爲對遠平面上的點,而

(x,y,-1,1) 

轉變爲一個點近平面,和連接線,我可以查詢視圖中的所有對象相交的截頭圓錐體。 轉換後,我把它們各自的.w組件分開。 這適用於遠平面,但近平面上的點以某種方式轉變爲世界空間起源。

我認爲這與我投入逆向投影的1個w分量有關,因爲通常投影前是1,而不是後,我正在做反向投影。我究竟做錯了什麼?

+0

我想你需要更多的示例代碼。特別是將您的近點設置爲原點的部分 – 2009-02-26 22:22:22

+0

另外,您能否提供您正在使用的投影矩陣?它是否抵消? – Coincoin 2009-02-26 22:28:08

回答

4

我知道這只是一種解決方法,但是您可以通過僅使用遠點和觀察位置來推斷近平面點。

near_point = view_position 
      + (far_point - view_position) * (near_distance/far_distance) 

至於你真正的問題。首先,不要忘記W除以!此外,根據您的投影矩陣,您是否嘗試過(x,y,0,1)而不是z = -1。

near_point = worldview_inverse * (projection_inverse * vector) 
near_point /= near_point.W