О чем следует беспокоиться при изменении источника OpenGL в верхнем левом углу экрана?

11

Для самообразования я пишу 2D-платформер на C ++ с использованием SDL / OpenGL. Сначала я начал с чистого SDL, используя учебники на sdltutorials.com и lazyfoo.net, но теперь я использую SDL для создания контекста рендеринга OpenGL, а затем рендеринга с использованием функций OpenGL (в частности, непосредственного режима, но я изучаю VAO / VBOs ). Я использую SDL только для интерфейса, аудио и т. Д.

SDL использует систему координат с началом координат в верхнем левом углу экрана и положительной осью Y, направленной вниз. Это легко настроить мою ортографическую проекцию в OpenGL, чтобы отразить это.

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

Что меня должно беспокоить с точки зрения рендеринга, когда я делаю это?

Если у кого-нибудь есть какой-либо совет или он сделал это сам и может указать на будущие подводные камни, это было бы здорово, но на самом деле любые мысли будут оценены.

производное
источник
1
Используете ли вы SDL для рендеринга (как в функциях блитинга SDL), или вы используете SDL для создания контекста рендеринга OpenGL, а затем используете функции рендеринга OpenGL?
Никол Болас
1
Я использую SDL для создания контекста рендеринга OpenGL и использую функции OpenGL для рендеринга. Я уточню это в вопросе.
производная
1
Возможно, если вы собираетесь использовать физическую систему, лучше посмотрите, какую систему координат она использует (правая или левая, Y-UP или Y-DOWN) и продолжайте использовать ту же. Конечно, вы можете делать такие вещи, как инвертирование силы тяжести, но я бы попробовал использовать то же самое, чтобы упростить работу.
Густаво Масиэль

Ответы:

8

«Что меня должно беспокоить с точки зрения рендеринга, когда я делаю это?» - немного. Система координат - это просто соглашение, а не жесткое и быстрое правило, и это совершенно законная и обоснованная вещь. Просто убедитесь, что вы последовательны в своем собственном использовании, и все будет работать нормально.

Максимус Минимус
источник
Большой! У меня была предчувствие, что единодушие, о которой мне нужно было беспокоиться, - это самообладание, но для меня это новая территория.
производная
1
Я должен добавить, что дорогой старый Quake сделал это еще в 1996 году, и он работал просто отлично.
Максимус Минимус
5

При работе в 2D с OpenGL я часто использую верхний левый угол в качестве источника. Это можно сделать с помощью:

glOrtho(0,      // left
        width,  // right
        height, // bottom
        0,      // top
        0,      // zNear
        1       // zFar
        );

Тем не менее, есть некоторые подводные камни при изменении источника в верхнем левом углу.

Одна ловушка, с которой я сталкивался более одного раза: glScissor()она используется для отсечения, всегда использует координаты левого нижнего угла.

Его подпись:

void glScissor( GLint x, GLint y, GLsizei width, GLsizei height )

где x, yукажите нижний левый угол ножничного бокса.

В более общем смысле все функции, которые работают в оконных координатах, используют нижний левый угол в качестве источника. Это включает в себя такие функции , как gluProject, gluUnProject, glCopyPixelsи т.д.

Но некоторые функции, например, glDrawPixelsиспользуют glRasterPosдля позиционирования и glRasterPosиспользуют объектные (т.е. преобразованные) координаты .

Если вы работаете в Linux и знаете, как его использовать man, вы можете получить копию руководств OpenGL здесь: ftp://ftp.sgi.com/sgi/opengl/doc/ Я нахожу их в реальном времени. заставки.

Также я заметил, что вы говорите «переверните файл перед загрузкой» текстур. Это не обязательно. Вместо переворачивания изображения при загрузке, просто переверните координаты текстуры, чтобы при рендеринге перейти от 1,0 до 0,0.

QuasarDonkey
источник