OpenGL: mat4x4, умноженное на vec4, дает tvec <float> - PullRequest
0 голосов
/ 12 декабря 2018

Рассмотрим код:

glm::mat4x4 T = glm::mat4x4(1);
glm::vec4 vrpExpanded;
vrpExpanded.x = this->vrp.x;
vrpExpanded.y = this->vrp.y;
vrpExpanded.z = this->vrp.z;
vrpExpanded.w = 1;

this->vieworientationmatrix =  T * (-vrpExpanded);

Почему T*(-vrpExpanded) дает вектор?Согласно моим знаниям линейной алгебры, это должно дать mat4x4.

1 Ответ

0 голосов
/ 12 декабря 2018

Согласно моим знаниям линейной алгебры, это должно дать mat4x4.

Тогда это проблема.

Согласно линейной алгебре, матрица может быть умножается на скаляр (который выполняет поэлементное умножение) или на другую матрицу.Но даже тогда матрица * матричное умножение работает только в том случае, если количество строк в первой матрице равно количеству столбцов во второй.И в результате получается матрица с числом столбцов в первом и числом строк во втором.

Так что, если у вас есть матрица AxB и вы умножаете ее на матрицу CxD, это работает, только еслиB и C равны.В результате получается матрица AxD.

Умножение матрицы на вектор означает, что вектор является матрицей .Поэтому, если у вас есть матрица 4x4, и вы умножаете ее правой кнопкой на 4-элементный вектор, это будет иметь смысл, только если вы рассматриваете этот вектор как матрицу 4x1 (поскольку вы не можете умножить матрицу 4x4 на матрицу 1x4).И результат матрицы 4х4 * матрица 4х1 ... матрица 4х1.

АКА: вектор .

GLM делает именно то, что вы просили.

...