关于opengl:从Camera Matrix获取投影和视图矩阵

Get Projection and View Matrix from Camera Matrix

我有3 * 4摄像机矩阵,它是P = K[R | -RC],其中K是固有摄像机矩阵,R是旋转矩阵,C是摄像机相对于世界原点的位置,而-RC是平移。 我可以将P分解为KRC。 我想如何使用此相机信息在openGL中进行渲染。 如何使用KRC设置视图矩阵和投影矩阵; 在openGL中,使其代表实际的相机位置?


在OpenGL中,所有矩阵都是4x4齐次变换,如下所述:

1
2
3
4
[Xx][Yx][Zx][Tx]
[Xy][Yy][Zy][Ty]
[Xz][Yz][Zz][Tz]
[Xw][Yw][Zw][Tw]

您的相机矩阵和视图矩阵是同一件事,并且是由"向上"向量,"位置"向量和"方向"向量构成的。

从这些向量,您可以计算视图矩阵:

1
2
3
4
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

然后,您可以像这样构造矩阵:

1
2
3
4
[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数学库,该库具有 这些常用功能已经编写。