情况如下:
XMVECTOR posVec = XMLoadFloat3(&(pVertexInfos[j].pos));
// At this point posVec equals {6143.72119, -714.767151, -16615.9004, 0.000000000}
// and new newModelMatrix's rows are as follows:
// Row 0: {1.00000000, 0.000000000, 0.000000000, 0.000000000}
// Row 1: {0.000000000, 0.000000000, -1.00000000, 0.000000000}
// Row 2: {0.000000000, 1.00000000, 0.000000000, 0.000000000}
// Row 3: {0.000000000, 0.000000000, 0.000000000, 1.00000000}
posVec = XMVector3Transform(posVec, newModelMatrix);
// But then posVec equals **{6143.72119, -16615.9004, 714.767151, 1.00000000}**
根据我重复的铅笔和纸张计算(汗学院证实我做得对)以及正确的程序执行应该等于 {6143.72119,16615.9004,-714.767151,1.0000000000} < / p>
以防万一我疯了,以下是调试器的屏幕截图:
之后:
那么这里发生了什么?根据我的研究,XMVector3Transform应该正是我想要的,这是Matrix times Vector = Vector,但由于某种原因,看起来负面的迹象搞砸了。你可以想象,这会在应用程序中导致一个非常糟糕的视觉错误(我确认正确地破解操作可以解决问题)。
提前感谢您的帮助, 尼科
答案 0 :(得分:1)
您获得的结果似乎没有任何问题。
您设置的矩阵采用一个位置(X,Y,Z)并将其乘以一个矩阵,该矩阵交换Y和Z轴并取消产生的Z.
当您通过矩阵乘以向量时,您一次跨过一列并向下工作,而不是沿着行,就像使用矩阵乘法一样。
结果计算应为:
X = (6143.72119 * 1.0f) + (-714.767151 * 0.0f) + (-16615.9004 * 0.0f) = 6143.72219
Y = (6143.72119 * 0.0f) + (-714.767151 * 0.0f) + (-16615.9004 * 1.0f) = -16615.9004
Z = (6143.72119 * 0.0f) + (-714.767151 * -1.0f) + (-16615.9004 * 0.0f) = 714.767151
这正是函数给你的功能。也许你只是误解了如何进行矢量/矩阵乘法?