Вращение OpenGL ES в фиксированной системе координат - PullRequest
2 голосов
/ 24 мая 2010

Мне очень трудно выяснить, как вращать объект вокруг двух осей без изменения ориентации осей. Мне нужно только локальное вращение, сначала вокруг оси X, а затем вокруг оси Y (только пример, не имеет значения, сколько преобразований вокруг каких осей) без преобразования всей системы координат, только объекта. Проблема в том, что если я использую glRotatef arround X axis, оси также поворачиваются, и это то, что я не хочу. У меня есть куча статей об этом, но, похоже, я все еще что-то упускаю. Спасибо за любую помощь.

Чтобы иметь пример кода здесь, это что-то вроде этого

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(rotX, 1.0f, 0.0f, 0.0f);
glRotatef(rotY, 0.0f, 1.0f, 0.0f);
drawObject();

но это также трансформирует систему координат.

Ответы [ 2 ]

1 голос
/ 13 января 2012

Создать глобальную матрицу. При вращении добавьте xAngle и yAngle к матрице.

Matrix.rotateM(matrix, 0, xAngleADD, matrix[1], matrix[5], matrix[9]);
Matrix.rotateM(matrix, 0, yAngleADD, matrix[0], matrix[4], matrix[8]);
gl.glMultMatrixf(matrix, 0);
0 голосов
/ 24 мая 2010

Возможно, вам нужно восстановить матрицу вида модели после рисования объекта.Вы можете сделать это используя встроенный матричный стек OpenGL.Общий шаблон выглядит так:

// Set up global coordinate system:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// ... add world and view transformations here ...

// Draw your object:
glPushMatrix(); // save the current matrix on the stack
glRotatef(rotX, 1.0f, 0.0f, 0.0f);
glRotatef(rotY, 0.0f, 1.0f, 0.0f);
drawObject();
glPopMatrix(); // restore the previously saved matrix

// Repeat the above for other objects
...