Я пытаюсь построить матрицу модели для каждого кадра, для этого я создаю матрицу перемещения, поворота и масштабирования и умножаю ее.Но я не могу понять, как построить матрицу вращения и правильно масштабировать ее.
Вот что я делаю:
glm::mat4 scale = glm::scale(mat4(1.0f), my_models[i].myscale);
glm::mat4 rotateM(1.0);
glm:mat4 translate = glm::translate(mat4(1.0f), my_models[i].initialPos);
rotateM = mat4_cast(my_models[i].Quat);
rotateM = glm::rotate(rotateM, (float) my_models[i].angle * t, my_models[i].animation_axis[0]);
my_models[i].modelMatrix = translate * rotateM *scale;
my_models[i].Quat = quat_cast(my_models[i].modelMatrix);
В конструкторе, который я использую:
quat Quat = glm::angleAxis(glm::radians(90.f), glm::vec3(0.f, 1.f, 0.f));
Если my_models [i] .myscale ровно 1.0f, он вращается очень хорошо, но если он больше, объект продолжает расти и странно вращается.Кватернионы очень новы для меня, так что, я полагаю, я все испортил.
Чего мне не хватает?Существуют ли более простые способы построения матрицы вращения моделей?если да, то какую информацию я должен сохранять?
Редактировать: Как предложила jparima, следующее решило мою проблему.
glm::mat4 scale = glm::scale(mat4(1.0f), my_models[i].myscale);
glm::mat4 rotateM(1.0);
glm::mat4 translate = glm::translate(mat4(1.0f), my_models[i].initialPos);
my_models[i].Quat = rotate(my_models[i].Quat, my_models[i].angle * t, my_models[i].animation_axis[0]);
rotateM = mat4_cast(my_models[i].Quat);
my_models[i].modelMatrix = translate * rotateM * scale;