OpenGL glRotate и glTranslate заказ - PullRequest
       23

OpenGL glRotate и glTranslate заказ

3 голосов
/ 24 марта 2012

Я пытаюсь повернуть куб вокруг оси, и я делаю следующее:

    glTranslatef(0.0f, 0.0f, -60.0f);
    glRotatef(angle, 0.0f, 1.0f, 0.0f);

Я ожидаю, что он переместится в -60 и будет вращаться вокруг оси Y по кругу, но вместо этого он просто вращается вокруг себя в координате -60. Когда я пишу это так:

    glRotatef(angle, 0.0f, 1.0f, 0.0f);
    glTranslatef(0.0f, 0.0f, -60.0f);

Я получаю то, что мне нужно, но я не понимаю, почему? Почему они делают с противоположным? Может кто-нибудь объяснить, пожалуйста.

1 Ответ

4 голосов
/ 24 марта 2012

Когда вы применяете преобразование, оно применяется локально. Думайте об этом как о системе координат, по которой вы движетесь. Вы начинаете с системы координат, представляющей ваш вид, а затем трансформируете эту систему координат относительно себя. Таким образом, в первом случае вы перемещаете систему координат -60 вдоль оси Z системы координат, а затем вращаете систему координат вокруг новой оси Y в новом начале координат. Все, что вы рисуете, затем рисуется в этой новой системе координат.

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

...