![](/img/trans.png)
[英]How to retrieve the camera origin/position from the view projection matrix? (OpenGL)
[英]Get Projection and View Matrix from Camera Matrix
我有3 * 4相機矩陣,即P = K[R | -RC]
P = K[R | -RC]
,其中K
是固有攝像機矩陣, R
是旋轉矩陣, C
是攝像機相對於世界原點的位置, -RC
是平移。 我可以將P
分解為K
, R
和C
我想如何使用此相機信息在openGL中進行渲染。 我應該如何使用K
, R
, C
設置View Matrix和Projection Matrix; 在openGL中,使其代表實際的相機位置?
在OpenGL中,所有矩陣都是4x4齊次變換,如下所述:
[Xx][Yx][Zx][Tx]
[Xy][Yy][Zy][Ty]
[Xz][Yz][Zz][Tz]
[Xw][Yw][Zw][Tw]
您的相機矩陣和視圖矩陣是同一件事,並由“向上”向量,“位置”向量和“方向”向量構成。
從這些向量,您可以計算視圖矩陣:
vec3 Z = Eye - Location; //this is your "forward" vector
Z.Normalize();
vec3 Y = Up;
vec3 X = Y.Cross( Z ); //crossing Y with Z gives you a perpendicular vector, which is needed to construct a coordinate basis matrix
然后,您可以像這樣構造矩陣:
[Xx][Yx][Zx][-X.Dot( Eye )]
[Xy][Yy][Zy][-Y.Dot( Eye )]
[Xz][Yz][Zz][-Z.Dot( Eye )]
[Xw][Yw][Zw][1.0]
然后你有你的觀點矩陣
您的投影矩陣與此數據無關,代表了視圖/世界到屏幕空間的轉換,並且取決於您的屏幕尺寸,視角范圍以及近/遠剪切范圍。
我不記得如何從這些數據計算投影矩陣,所以我只建議您,如果您使用C ++進行GL工作,則應下載並使用GLM數學庫,該庫具有這些常用功能已經編寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.