OpenGL MatrixModes - PullRequest
       5

OpenGL MatrixModes

1 голос
/ 02 декабря 2011

Я не могу понять, что делают эти режимы.

Я вижу, вы устанавливаете glMatrixMode (GL_MODELVIEW);

перед тем, как рисовать вершины, но что это на самом деле означает?Что он делает?

Ответы [ 2 ]

4 голосов
/ 02 декабря 2011

В OpenGL есть два основных матричных режима (есть два других, но вам, вероятно, не нужно беспокоиться о них), это GL_MODELVIEW и GL_PROJECTION.Вместе они определяют, как opengl преобразует вершины, которые вы вставляете, в визуалы, которые вы получаете.Когда вы недавно позвонили glMatrixMode(GL_MODELVIEW), вы будете изменять то, как ваши точки будут перемещаться в пространстве, вы можете заставить все свои точки переводиться с помощью glTranslatef, вращаться с glRotatef и так далее.Когда вы позвоните glMatrixMode(GL_PROJECTION), вы будете изменять способ проецирования ваших очков на экран.Это режим, в котором вы хотите быть, чтобы вызывать такие вещи, как gluPerspective или glOrtho.

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

2 голосов
/ 02 декабря 2011

Когда вы вызываете glMatrixMode (), вы устанавливаете матрицу для последующих преобразований.

Обычно вы захотите использовать матрицу GL_PROJECTION для хранения преобразования проекции (так называемый glOrtho / glFrustum после перехода на эту матрицу и GL_MODELVIEW для позиционирования и вращения объектов glRotate / glTranslate.

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

пример:

glMatrixMode(GL_PROJECTION);
glLoadIdentity(); //now we zero only the projection matrix
glOrtho(0,width,0,height,-1,1);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

// now you can use glTranslate and glRotate for positioning objects
// and then call glLoadIdentity() again to return to origin, still preserving your projection

Я бы также посмотрел Красную книгу или учебные пособия на opengl.org, поскольку они полностью охватывают эту тему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...