OpenGL - матрица ортопроекции, glViewport - PullRequest
6 голосов
/ 01 сентября 2010

У меня проблемы с намоткой головы на то, как это работает. Во-первых, в двумерной игре матрица проекции должна быть настроена как орто с левым, правым, верхним, нижним соответствием окну, верно? Но когда размер окна изменяется, я должен просто изменить glViewport, а не матрицу проекции? И как мне сохранить соотношение сторон?

Может ли кто-нибудь объяснить цели этих двух вещей в 2-й орфографической игре, чтобы я мог лучше понять это?

Такое ощущение, что OpenGL делает много бесполезных вещей в 2D-настройке. Растеризация и вычисление фрагментов, когда изображения уже существуют, преобразование координат вершин в NDC только для преобразования обратно в то, что они уже где, с помощью glViewport.

Кроме того, как в устаревшем бесплатном OpenGL мы должны создавать свои собственные матрицы, а не наши собственные вычисления, которые делает glViewport?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 01 сентября 2010

Не путайте то, что вы вводите в GL и что оно выводит.

параметры, которые вы используете для вычисления матрицы Орто, соответствуют вашим входным данным . Выходной результат матрицы проекции всегда равен кубу [-1: 1] x [-1: 1] x [-1: 1].

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

Да, GL делает много бесполезных вещей для 2D-рендеринга. В конце концов, это 3D API ...

В заключение я скажу, что вам не нужно строить матрицы для выполнения 2D-преобразований, если ваш вершинный шейдер выводит куб, о котором я упоминал ранее. Если вы хотите написать верхний правый угол области просмотра, вы всегда можете передать свои вершины непосредственно как (0,0) (0,1) (1,0) (1,1) и просто вывести это.

0 голосов
/ 01 сентября 2010

Не уверен, на каком языке вы используете OpenGL, но если вы ищете C ++ на этом сайте, http://nehe.gamedev.net/ в значительной степени охватывает все и содержит учебные пособия от простого "Hello World" до базовогоигры и 3d-эффекты.

Надеюсь, это поможет

...