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