我定义了一个矩阵,其中包含类似于 GL_MODELVIEW 矩阵的相机位置和方向:
(m3 = 0; m7 = 0; m11 = 0; m15 = 1)
我正在尝试将此数据加载到 ModelViewMatrix 中。我正在考虑这两种可能性:
- 使用函数 glLoadTransposeMatrixf():
如果我使用此解决方案,我将获得正确的位置和方向。问题是我需要使用第二种解决方案,因为我正在修改代码上的 Left/Up/Forward/Translation 向量以修改视图。
使用函数 gluLookAt():
gluLookAt(Translation->X, Translation->Y, Translation->Z, Translation->X-Forward->X, Translation->Y-Forward->Y, Translation->Z-Forward->Z, Up->X, Up->Y, Up->Z);
我的问题是我获得的 GL_MODELVIEW 矩阵与其他情况不同。具体来说,平移向量是错误的,但左/上/前向量是正确的。
我真的很困惑。有人可以解释这两个选项之间是否存在差异以及我做错了什么吗?
获得的结果:
我正在使用这样的矩阵 M:
M = (Lx Upx Fwx tx)
(Ly Upy Fwy ty)
(LZ Upz Fwz tz)
(0 0 0 1 )
使用第一种方法,我获得了正确的 GL_MODELVIEW 矩阵:
N = (Lx Upx Fwx tx)
(Ly Upy Fwy ty)
(Lz Upz Fwz tz)
(0 0 0 1 )
但是使用第二种方法,我得到了下一个 GL_MODELVIEW 矩阵:
N = (Lx Upx Fwx tx')
(Ly Upy Fwy ty')
(Lz Upz Fwz tz')
(0 0 0 1 )
注意 tx'!=tx, ty'!=ty, tz'!=tz。这非常令人困惑……