Трехмерная матрица проекции Орто, glViewport

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

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

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

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

спасибо.

2 ответов


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

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

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

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

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


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

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