2012-05-01 4 views
0

Я вращаюсь с моделью в Android OpenGL.OpenGL ES rotate model in 3 axis

Почему эти два примера ниже не дают одинаковых результатов? Я думал, нет никакой разницы, когда я вращаюсь вокруг оси x, а затем y или y, а затем x.

gl.glRotatef(_angleY, 0f, 1f, 0f); //ROLL 
gl.glRotatef(_angleX, 1f, 0f, 0f); //ELEVATION 
gl.glRotatef(_angleZ, 0f, 0f, 1f); //AZIMUTH 


gl.glRotatef(_angleX, 1f, 0f, 0f); //ELEVATION 
gl.glRotatef(_angleY, 0f, 1f, 0f); //ROLL 
gl.glRotatef(_angleZ, 0f, 0f, 1f); //AZIMUTH 
+3

Поздравляем, вы только что нашли ** одну ** причин, по которым углы Эйлера обычно представляют собой плохое представление для ротации: существует огромное количество разных условностей и ** они действительно все дают разные результаты **, и все думают, что его конвенция стандартная, хотя все они одинаково (un) мощные. –

ответ

0

Если эти вращения не применяются одновременно, я думаю, что порядок определенно имеет значение.

Если бы я был куб, и я повернул ее вокруг оси х и переместил переднюю поверхность к верхней, после поворота вокруг оси у, в оригинальной передней поверхности все равно будет на наверх.

Если вместо этого я сначала поворачивается вокруг оси у то оригинальная передняя поверхность будет перемещен в сторону так, когда я затем вращают вокруг оси хоригинальный передний лицо бы НЕ поворачиваются наверх.

Я считаю, что порядок вращения делает вопрос.