我有3 * 4相机矩阵,P = K[R | -RC]
其中K
是内在相机矩阵,R
是旋转矩阵,C
是相对于世界原点的相机位置和-RC
是翻译。我可以将P
分解为K
,R
和C
。我想如何使用这个相机信息在openGL中渲染。如何使用K
,R
,C
设置查看矩阵和投影矩阵;在openGL中,它代表实际的摄像机位置?
答案 0 :(得分:1)
在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工作,那么你下载并使用{{3已经编写了这些常用函数的库。