У меня проблемы в OpenGL, когда мой объект (планета) поворачивается относительно текущего вращения камеры.Поначалу кажется, что это работает, но затем, немного повернув, повороты перестают быть правильными / относительно камеры.
Я вычисляю дельту (разницу) в движениях mouseX и mouseY на экране.Вращение хранится в Vector3D, называемом «planetRotation».
Вот мой код для вычисления вращения относительно planetRotation:
Vector3D rotateAmount;
rotateAmount.x = deltaY;
rotateAmount.y = deltaX;
rotateAmount.z = 0.0;
glPushMatrix();
glLoadIdentity();
glRotatef(-planetRotation.z, 0.0, 0.0, 1.0);
glRotatef(-planetRotation.y, 0.0, 1.0, 0.0);
glRotatef(-planetRotation.x, 1.0, 0.0, 0.0);
GLfloat rotMatrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, rotMatrix);
glPopMatrix();
Vector3D transformedRot = vectorMultiplyWithMatrix(rotateAmount, rotMatrix);
planetRotation = vectorAdd(planetRotation, transformedRot);
Теоретически, то, что это делает, устанавливаетвращение в переменной 'rotateAmount'.Затем он получает это в пространство модели, умножая этот вектор на матрицу обратного преобразования модели (rotMatrix).
Это преобразованное вращение затем добавляется к текущему вращению.
Чтобы отобразить этонастраиваемое преобразование:
glPushMatrix();
glRotatef(planetRotation.x, 1.0, 0.0, 0.0);
glRotatef(planetRotation.y, 0.0, 1.0, 0.0);
glRotatef(planetRotation.z, 0.0, 0.0, 1.0);
//render stuff here
glPopMatrix();
Камера колеблется, вращение, которое я пытаюсь выполнить, не похоже на текущее преобразование.
Что я делаю неправильно