从相机矩阵中获取投影和查看矩阵

时间:2017-11-09 11:19:10

标签: opengl camera-calibration camera-matrix

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

1 个答案:

答案 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已经编写了这些常用函数的库。