2012-12-12 71 views
5

我很困惑如何將世界空間座標轉換爲相機座標。世界空間相機空間

我現在的理解是,我需要計算攝像機空間向量,其中

N =視點 - LOOKAT

U =向上(0,1,0)×N(標準化)

v = n x u

然後,一旦我有< U,V,N>我會簡單地乘以每個點?

回答

3

讓我們假設:

  • 眼位Ë =(e_x,E_Y,e_z),
  • 觀察方向d =(D_X,d_y,d_z)
  • Up-Vector is UP =(up_x,up_y,up_z)

現在首先構造一個標準正交幀:

  • R = DX UP
  • U = RXD
  • 現在正常化d,R,U和你有相機的正交幀(d, R,U)

爲了改造全局座標框架裝入凸輪座標框架可以應用以下矩陣M_R

  • | R_x,R_y,R_z,0 |
  • | U_x,U_y,U_z,0 |
  • | -D_x,-D_y,-D_z,0 |
  • | 0.0,0.0,0.0,1。0 |

如果凸輪不位於全球原點您還可以申請翻譯M_T

  • | 1,0,0,-e_x |
  • | 0,1,0,-e_y |
  • | 0,0,1,-e_z |
  • | 0,0,0,1 |

最終從全球的完整變換矩陣凸輪座標爲:

  • 中號 = M_R * M_T
  • | R_x,R_y,R_z,(R dot -E)|
  • | U_x,U_y,U_z,(U dot -E)|
  • | -D_x,-D_y,-D_z,(D dot E)|
  • | 0.0,0.0,0.0,1.0 |
+0

順便說一句。你在文章中提到的矩陣對應於(M_R)^ - 1 =(M_R)^ T在我的文章中,是從凸輪座標到全球座標的逆向變換。 – Dirk

+0

非常感謝!我一直堅持這一點,你的解釋非常明確,易於遵循。 +1 – Freddy

0

我認爲這是在以前的帖子錯誤

這個矩陣

| R_x, R_y, R_z, (R dot -E) | 
| U_x, U_y, U_z, (U dot -E) | 
| -D_x, -D_y, D_z, (D dot E)| 
| 0.0, 0.0, 0.0, 1.0| 

應該是(我在OpenGL測試,這個人是右)

| R_x, R_y, R_z, (R dot -E) | 
| U_x, U_y, U_z, (U dot -E) | 
| -D_x, -D_y, -D_z, (D dot E)| 
| 0.0, 0.0, 0.0, 1.0| 
+0

D_z中的否定取決於系統是使用右手還是左手的規則。 OpenGL使用右手系統,這就是爲什麼你必須修改你的矩陣(即在右手屏幕中負z點進入屏幕) –

相關問題