2013-02-25 98 views
0

我有點困惑於相機世界與世界到相機轉換。相機到世界變換和世界到相機轉換

  1. 在openGL渲染管線中,轉換是從世界到相機,對嗎? 基本上,在相機上構造一個視圖座標系,然後世界中的對象首先相對於相機進行平移,然後與相機座標系一起旋轉。這是gluLookat的表演嗎?

  2. 如果我想從照相機視圖回到世界觀,應該怎麼做? 在數學上,我在思考找到平移和旋轉矩陣的逆,然後在平移之前應用旋轉,對嗎?

回答

1

通常有幾種轉換將世界位置映射到屏幕上。以下是最常見的:

  • 世界轉換:可以應用於對象,以便將它們相對於其他對象重新對齊。
  • 查看轉換:轉換完成後,相機處於O位置,並朝z方向看。
  • 投影變換:執行例如透視變換來模擬真實相機
  • 視口自適應:這基本上是一個縮放和平移,它將範圍[-1,1]的位置映射到視口。這通常是屏幕的寬度和高度。

gluLookAt用於創建視圖轉換。您可以想像如下:將相機放置在場景中的某個位置。現在轉換整個場景(使用相機),以便相機處於原點,朝向z方向,y軸表示朝上方向。這是一種簡單的剛體轉換,可以表示爲任意旋轉(具有三個自由度)和任意翻譯(具有另外三個自由度)。每一個剛體變換都可以分解爲單獨的旋轉和平移。如果您選擇正確的值,即使評估的順序也可能會有所不同。轉換可以用不同的方式來解釋。前一段時間,我就這個話題寫了blog entry。如果你有興趣,請看看它。雖然它是用於DirectX的,但OpenGL的數學幾乎相同。你只需要注意轉置矩陣。

對於第二個問題:是的,你是對的。你需要找到逆轉換。這可以通過逆矩陣很容易地實現。如果您指定的視圖矩陣V如下:

V = R_xyz * T_xyz 

則逆變換V^-1

V^-1 = T_xyz^-1 * R_xyz^-1 

然而,這是因爲有更多的改造會不會地圖畫面位置的世界位置上。我希望,那會回答你的問題。

這是另一個有趣的一點。視圖矩陣是將攝像機模型(在原點,朝向z方向)與指定位置對齊的轉換的逆。這種關係被稱爲系統變換與模型變換。

+0

感謝您的回覆,最後,我腦海中的點連線。哇,你有很多有趣的項目。 – fiftyplus 2013-02-25 23:28:54