У меня возникают проблемы с OpenGL, когда мой объект (планета) вращается относительно текущего вращения камеры. Кажется, что это работает сначала, но затем, после поворота немного, вращение больше не правильное/относительно камеры.Вращающийся объект относительно камеры в 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();
Камера вид качаний вокруг, вращения я пытаюсь выполнить, кажется, не по отношению к текущей трансформации.
Что я делаю неправильно?