我对我的问题在这里感到非常困惑。我已经建立了一个矩阵,它将全局/世界坐标转换为对象的局部坐标空间。该转换矩阵是使用来自四个向量(向前、向上、侧面和位置)的对象信息构建的。然后在每个对象的绘制时将此定位矩阵传递给glMultMatrixf()
,以便我可以围绕每个对象绘制一个简单的轴以可视化局部坐标系。这完全可以正常工作并且符合预期,并且随着对象在世界中移动和旋转,它们的局部坐标轴也是如此。
问题是,当我采用相同的矩阵并将其乘以列向量(将一个对象的全局位置转换为另一个对象的局部坐标系)时,结果与我预期的完全不同。例如:
我的本地化矩阵如下:
0.84155 0.138 0.5788 0
0.3020 0.8428 -0.5381 8.5335
0.4949 -0.5381 -0.6830 -11.6022
0.0 0.0 0.0 1.0
我输入位置列向量:
-30.0
-30.0
-30.0
1.0
并获得以下输出:
-99.2362
-1.0199
4.8909
1.0000
由于我的对象此时的位置是 (-50.8, 8.533, -11.602, 1),我知道 x 坐标的输出不可能像 -99.2362 一样大。此外,当我找到两个全局点之间的距离以及局部点与原点之间的距离时,它们是不同的。
我已经在 Matlab 中检查了这一点,看来我的矩阵乘法是正确的(注意:在 Matlab 中,您必须首先转置本地化矩阵)。所以我认为我的本地化矩阵没有正确构造 - 但是OpenGL成功地使用这个矩阵来绘制局部坐标轴!
我试图在这个问题中不包括不必要的细节,但如果你觉得你需要更多,请不要犹豫,问!:)
非常感谢。