Для самообразования я пишу 2D-платформер на C ++ с использованием SDL / OpenGL. Сначала я начал с чистого SDL, используя учебники на sdltutorials.com и lazyfoo.net, но теперь я использую SDL для создания контекста рендеринга OpenGL, а затем рендеринга с использованием функций OpenGL (в частности, непосредственного режима, но я изучаю VAO / VBOs ). Я использую SDL только для интерфейса, аудио и т. Д.
SDL использует систему координат с началом координат в верхнем левом углу экрана и положительной осью Y, направленной вниз. Это легко настроить мою ортографическую проекцию в OpenGL, чтобы отразить это.
Я знаю, что координаты текстуры - это правая система со значениями от 0 до 1 - перелистывание текстуры по вертикали перед рендерингом (ну, переверните файл перед загрузкой) приводит к текстурам, которые рендерится правильно ... что хорошо, если я рисую всю текстуру, но в конечном итоге я буду использовать наборы плиток и могу представить проблемы.
Что меня должно беспокоить с точки зрения рендеринга, когда я делаю это?
Если у кого-нибудь есть какой-либо совет или он сделал это сам и может указать на будущие подводные камни, это было бы здорово, но на самом деле любые мысли будут оценены.
Ответы:
«Что меня должно беспокоить с точки зрения рендеринга, когда я делаю это?» - немного. Система координат - это просто соглашение, а не жесткое и быстрое правило, и это совершенно законная и обоснованная вещь. Просто убедитесь, что вы последовательны в своем собственном использовании, и все будет работать нормально.
источник
При работе в 2D с OpenGL я часто использую верхний левый угол в качестве источника. Это можно сделать с помощью:
Тем не менее, есть некоторые подводные камни при изменении источника в верхнем левом углу.
Одна ловушка, с которой я сталкивался более одного раза:
glScissor()
она используется для отсечения, всегда использует координаты левого нижнего угла.Его подпись:
где
x, y
укажите нижний левый угол ножничного бокса.В более общем смысле все функции, которые работают в оконных координатах, используют нижний левый угол в качестве источника. Это включает в себя такие функции , как
gluProject
,gluUnProject
,glCopyPixels
и т.д.Но некоторые функции, например,
glDrawPixels
используютglRasterPos
для позиционирования иglRasterPos
используют объектные (т.е. преобразованные) координаты .Если вы работаете в Linux и знаете, как его использовать
man
, вы можете получить копию руководств OpenGL здесь: ftp://ftp.sgi.com/sgi/opengl/doc/ Я нахожу их в реальном времени. заставки.Также я заметил, что вы говорите «переверните файл перед загрузкой» текстур. Это не обязательно. Вместо переворачивания изображения при загрузке, просто переверните координаты текстуры, чтобы при рендеринге перейти от 1,0 до 0,0.
источник