0

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

4

1 回答 1

3

在 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 数学库,它有这些常用函数已经写好了。

于 2017-11-09T13:36:14.930 回答