Мне трудно понять, почему я получаю разные результаты при умножении двух матриц DirectX 4x4 вместе, в зависимости от того, выполняется ли умножение внутри функции класса или нет.
Используя в качестве примера единичные матрицы, значения result1 и result2 в конечном итоге будут разными, используя следующий код.
#include <iostream>
#include <DirectXMath.h>
using namespace DirectX;
class Model {
public:
XMMATRIX MatrixMult(XMMATRIX test) {
XMMATRIX result = test * XMMatrixIdentity();
return result;
}
private:
};
int main() {
Model m;
XMMATRIX result1 = XMMatrixIdentity() * XMMatrixIdentity(); //returns identity
XMMATRIX result2 = m.MatrixMult(XMMatrixIdentity()); //doesn't return identity
int height = 4;
int width = 4;
//Output results
XMMATRIX results[2] = { result1, result2 };
//for each result
for (int res = 0; res < 2; ++res) {
//for each row
for (int i = 0; i < height; ++i)
{
//for each column
for (int j = 0; j < width; ++j)
{
if (j == 0) {
std::cout << XMVectorGetX(results[res].r[i]) << ' ';
}
else if (j == 1) {
std::cout << XMVectorGetY(results[res].r[i]) << ' ';
}
else if (j == 2) {
std::cout << XMVectorGetZ(results[res].r[i]) << ' ';
}
else if (j == 3) {
std::cout << XMVectorGetW(results[res].r[i]) << ' ';
}
}
std::cout << std::endl;
}
std::cout << "\n";
}
return 0;
}
Это действительно похоже на результат2, ожидаемый результат начинается в строке 3 матрицы?(Вывод ниже)
//result1
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
//result2
8.2597e-39 -1.07374e+08 -1.07374e+08 -1.07374e+08
-1.07374e+08 -1.07374e+08 -1.07374e+08 -1.07374e+08
1 0 0 0
0 1 0 0
Я знаю, передавая массив как функцию, я делаю его копию, но я бы не подумал, что здесь что-то изменится.
Любая помощь будет принята с благодарностью!