gpt4 book ai didi

c++ - 为什么这个 XMVector3Transform 调用没有返回正确的结果?

转载 作者:行者123 更新时间:2023-11-28 07:15:29 24 4
gpt4 key购买 nike

情况如下:

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.00000000}

以防万一我要疯了,这是之前调试器的屏幕截图: Debugger before op

及之后: Debugger after op

那么这里发生了什么?根据我的研究,XMVector3Transform 应该完全按照我的意愿行事,即 Matrix 乘以 Vector = Vector,但由于某种原因,它看起来像是负号被弄乱了。正如您想象的那样,这会导致应用程序稍后出现一个非常糟糕的视觉错误(我确认正确破解操作可以解决问题)。

提前感谢您的帮助,妮可

最佳答案

您得到的结果似乎没有任何问题。

您设置的矩阵取一个位置 (X, Y, Z) 并将其乘以交换 Y 轴和 Z 轴的矩阵并取反所得的 Z。

当您将 vector 乘以矩阵时,您一次遍历一列并向下计算,而不是沿着行,这与矩阵乘法相同。

计算结果应该是:

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

这正是该函数为您提供的。也许您只是误解了如何进行 vector/矩阵乘法?

关于c++ - 为什么这个 XMVector3Transform 调用没有返回正确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com