Если вы хотите повернуть объект вокруг центра мира, вам нужно сначала настроить матрицу вращения:
float angle = ...;
glm::vec3 rotAxis( ... );
glm::mat4 rotMat = glm::rotation( glm::mat4(1.0f), angle, rotAxis );
Обратите внимание, что функция glm::rotation
вычисляет синус и косинус угла и устанавливает соответствующие поля внутри матрицы.
2-й вам нужно настроить матрицу положения объектов, это матрица, которая описывает начальное положение объекта:
glm::vec3 position( radius, 0.0f, 0.0f );
glm::mat4 transMat = glm::translate( glm::mat4(1.0f), position );
Чтобы повернуть объект вокруг центра мира, вы должны умножить матрицу вращения rotMat
на матрицу модели transMat
, потому что матрица вращения определяет систему отсчета для размещения объекта.
glm::mat4 modelMat = rotMat * transMat;
Если вы хотите повернуть объект вокруг его собственного начала, вы должны сначала поместить свой объект в мир, а затем повернуть его:
glm::mat4 modelMat = transMat * rotMat;
См. также ответ на вопрос преобразование объектов OpenGL с несколькими поворотами разных осей
В вашем случае, когда вы хотите, чтобы объект был направлен в центр мира, вам сначала нужно перевести объект на его место. Во-вторых, вы должны рассчитать угол между осью X мира и направлением от объекта к центру. Наконец, вы должны повернуть объект в противоположном направлении.
glm::vec3 position( ... );
glm::vec3 center( ... );
glm::mat4 transMat = glm::translate( glm::mat4(1.0f), position );
float angle = atan2f(center.y - position.y, center.x - position.x);
glm::vec3 rotAxis( 0.0f, 0.0f, 1.0f );
glm::mat4 rotMat = glm::rotation( glm::mat4(1.0f), -angle, rotAxis );
glm::mat4 modelMat = transMat * rotMat;
person
Rabbid76
schedule
21.07.2017
pi/2
или что-то подобное. - person HolyBlackCat   schedule 21.07.2017