Сфера вращения OpenGL - PullRequest
       1

Сфера вращения OpenGL

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

Итак, я работаю над игрой с 8-мя мячами в OpenGL, и шары меня беспокоят.Они двигаются довольно хорошо, но в настоящее время скользят по столуЯ не могу понять вращений вдоль трех осей, поскольку они, кажется, меняются после вращения.Все, что я знаю, это текущая позиция (curPos) и следующая (nextPos).

velocityAng += (nextPos - curPos) / sphereRadius;
//and afterward I rotate on each axis
modelMatrix = glm::rotate(modelMatrix, velocityAng[2], glm::vec3(0, 0, 1));
modelMatrix = glm::rotate(modelMatrix, velocityAng[1], glm::vec3(0, 1, 0));
modelMatrix = glm::rotate(modelMatrix, velocityAng[0], glm::vec3(1, 0, 0));

Я выяснил, что если мяч находится в исходном положении, и я стреляю в верхнем или правом градусах, он идет хорошо, но после того, как я стреляю вправо, и поворачиваю шар на 90 градусов, когда я стреляю вверхэто больше не идет хорошо.Очевидно, что съемка при любых отличиях от 0, 90, 180, 270 идет совершенно не так.Ось шара, кажется, меняется, когда я вращаю его.

1 Ответ

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

Вы вращаетесь слишком много, вам нужно только одно вращение.Ось этого вращения должна быть перпендикулярна вектору (nextPos - curPos), т.е. вам нужно что-то вроде этого (не проверено):

const float angle = ( nextPos – curPos ).length() / sphereRadius;
// Assuming the table is on the XY plane
const vec3 axis = cross( nextPos - curPos, glm::vec3( 0, 0, 1 ) );
modelMatrix = rotate( modelMatrix, angle, axis );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...