我对我的问题所在感到非常困惑。我已经建立了一个矩阵,它将全局/世界坐标转换为对象的局部坐标空间。该转换矩阵是使用来自四个向量(前、上、侧和位置)的对象信息构建的。这个本地化矩阵在绘制每个对象时传递给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成功地使用这个矩阵绘制了局部坐标轴!
我尽量不在这个问题中包含不必要的细节,但是如果你觉得你需要更多的细节,请不要犹豫,尽管问!:)
非常感谢。
发布于 2011-03-07 20:16:19
我不得不猜测,但我想指出OpenGL矩阵乘法问题的两个来源:
8
1 9
210
311
你的矩阵看起来也很奇怪。前三列告诉我,您应用了一些旋转或缩放变换。最后一列显示了应用于每个坐标元素的平移量。这些数字与对象的位置相同。这意味着,如果您希望输出x坐标为-50.8,则第一行中的前三个元素的总和应为零:
-30*0.8154 -30*0.3020 -30*0.4939 +1* -50.8967
<-这应该是零->但是是-48,339。
所以我认为,在构造矩阵时确实存在一个问题。也许你可以解释你是如何构造矩阵的..。
https://stackoverflow.com/questions/5224129
复制相似问题