OpenGL MODELVIEW вращается вручную - PullRequest
1 голос
/ 17 октября 2010

Для моего класса графики наш профессор хочет, чтобы мы сами отслеживали нашу текущую матрицу и применяли к ней матрицы вращения / сдвига / масштабирования, а затем загружали ее с помощью glMatrixMode (GL_MODELVIEW) и glLoadMatrix (current_matrix). Все это выглядит хорошо, но когда я на самом деле использую его, у меня возникает проблема:

если я применю вращение к чему-либо, оно будет вращаться правильно, но если я попытаюсь повернуть мировоззрение вокруг оси y, каждый объект будет вращаться только вокруг своей оси y.

Если это было оригинальное изображение: http://www.glowfoto.com/static_image/17-104501L/1324/jpg/10/2010/img5/glowfoto

Вот что я получаю: Ссылка в комментарии

Вот что я хочу получить: Ссылка в комментарии

Я делаю копию моего current_matrix. Применить вращение к current_matrix (умножить его). Затем вызовите glMatrixMode (GL_MODELVIEW) и glLoadMatrix (transformed_matrix). Нарисовать что-то. Затем скопируйте старую матрицу обратно в current_matrix. Затем вызовите glMatrixMode (GL_MODELVIEW) и glLoadMatrix (current_matrix). Любая помощь будет прекрасна!

P.S. смысл этого задания - не использовать glRotate glScale и другие команды.

Ответы [ 3 ]

1 голос
/ 18 октября 2010

Что я делаю, (1) делаю копию моей current_matrix.(2) Применить вращение к current_matrix (умножить его).Затем (3) вызовите glMatrixMode (GL_MODELVIEW) и (4) glLoadMatrix (transformed_matrix)....

(числа, добавленные мной).

Похоже на шаг 4, вы перезаписываете результат шага 2. После шага 2 вы сохраняете результатгде-нибудь, например в transform_matrix?

(5) Нарисуйте что-нибудь.Затем (6) скопируйте старую матрицу обратно в current_matrix.Затем (7) вызовите glMatrixMode (GL_MODELVIEW) и (8) glLoadMatrix (current_matrix).

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

Также неясно, на какую «старую матрицу» вы ссылаетесь в шаге 6.

PS Вот хороший ресурс по пониманию матриц MODELVIEW и PROJECTION в OpenGL: Преобразование OpenGL .Например:

Еще раз отметим, что OpenGL выполняет несколько преобразований в обратном порядке, поэтому просмотр преобразования происходит раньше, чем моделирование преобразования в вашем коде.И, если вы хотите повернуть, а затем перевести объект, сначала поместите glTranslatef (), а затем glRotatef ().

1 голос
/ 17 октября 2010

Ну, ваша самая большая проблема в том, что вы, очевидно, вращаете самый правильный объект, а затем переводите его. То, что вы хотите сделать, это перевести его, а затем повернуть его (о происхождении). Для этого вам нужно применить перевод и вращение в обратном порядке ... Математическая математика некоммутативна.

0 голосов
/ 18 октября 2010

Убедитесь, что матрица построена правильно (распечатайте ее в файл и т. Если у вас все еще есть проблемы, покажите нам код.

...