Я пытался повернуть объект вокруг его локальных координат, а затем переместить его на основе повернутых координат, но я не смог достичь желаемых результатов, чтобы более подробно объяснить проблему. У меня есть объект в определенная точка в пространстве, и мне нужно повернуть ее вокруг своего собственного источника (а не глобального источника), а затем перевести объект на основе вновь повернутой оси, после долгих экспериментов я обнаружил, что могу либо вращать объект вокруг источника но координаты не будут вращаться с ним, или я могу преобразовать локальные координаты объектов с ним, но затем он будет вращаться вокруг глобального начала координат.
в настоящее время мой код вращения/перевода/масштабирования выглядит так
glm::mat4 myMatrix = glm::translate(glm::mat4(1.0f),trans);
glm::mat4 Model = glm::mat4(1.f);
glm::mat4 myScalingMatrix = glm::scale(sx, sy ,sz);
glm::vec3 myRotationAxis( 0, 1, 0);
glm::mat4 myRotationMatrix =glm::rotate(glm::mat4(1.0f),rot, myRotationAxis);
Model= myScalingMatrix* myRotationMatrix*myMatrix;
glm::mat4 MVP = Projection* View * Model;
Я считаю, что это код проблемы, особенно вторая строка снизу, но я могу ошибаться и опубликую больше кода, если это необходимо.
я также попытался создать обратную матрицу и использовать ее в начале расчета, но это, похоже, ничего не делает (я могу добавить код, с которым я пытался это сделать, если это необходимо). Если требуется какая-либо разработка в отношении этой проблемы не стесняйтесь спрашивать, и я расширю вопрос. Спасибо.
РЕДАКТИРОВАТЬ 1: Слегка измененный код, который был предложен в разделе ответов, по-прежнему дает ту же ошибку.
glm::mat4 Model = glm::mat4(1.f);
glm::mat4 myScalingMatrix = glm::scale(sx, sy ,sz);
glm::vec3 myRotationAxis( 0, 1, 0);
glm::mat4 myRotationMatrix =glm::rotate(glm::mat4(1.0f),rot, myRotationAxis);
glm::vec4 trans(x,y,z,1);
glm::vec4 vTrans = myRotationMatrix* trans ;
glm::mat4 myMatrix = glm::translate(glm::mat4(1.0f),vTrans.x,vTrans.y,vTrans.z);
Model= myScalingMatrix* myRotationMatrix*myMatrix;