Про що я повинен турбуватися, змінюючи походження OpenGL у верхній лівій частині екрана?


11

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

SDL використовує систему координат із початком у лівій верхній частині екрана та позитивною віссю y, спрямованою вниз. Налаштувати мою ортографічну проекцію в OpenGL легко, щоб відобразити це.

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

Що мене має турбувати з точки зору візуалізації, коли я це роблю?

Якщо у когось є поради або вони зробили це самі і можуть вказати на майбутні підводні камені, це було б чудово, але насправді будь-які думки будуть вдячні.


1
Чи використовуєте ви SDL для візуалізації (як у блискучих функціях SDL) чи використовуєте SDL для створення контексту візуалізації OpenGL, а потім для візуалізації використовуєте функції OpenGL?
Нікол Болас

1
Я використовую SDL для створення контексту візуалізації OpenGL та використання функцій OpenGL для візуалізації. Я уточню це у питанні.
похідне

1
Можливо, якщо ви збираєтеся використовувати фізичну систему, краще подивіться, яку систему координат вона використовує (правий або лівий, Y-UP або Y-DOWN) і продовжуйте використовувати ту саму. Звичайно, ви можете робити такі речі, як інвертування гравітації, але я б спробував використати те саме, щоб зробити легкіші.
Густаво Масель

Відповіді:


8

"Що мене має турбувати в плані відображення, коли я це роблю?" - не багато. Система координат - це лише умова, а не жорстке правило, і це абсолютно законна та дійсна річ. Просто переконайтеся, що ви послідовні у власному використанні, і все буде добре.


Чудово! Я мав прискіпливу власність - єдине, про що я мав турбуватися, але це нова територія для мене.
похідне

1
Додам, що дорогий старий Куаке зробив це ще в 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, ви можете захопити копію ManGL-сторінок OpenGL тут: ftp://ftp.sgi.com/sgi/opengl/doc/ Я знаходжу їх у реальному часі- заставка.

Також я помічаю, що ви говорите "переверніть файл перед завантаженням" текстур. Це не обов'язково. Замість того, щоб гортати зображення під час завантаження, просто переверніть координати текстури, щоб перейти від 1,0 до 0,0 при візуалізації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.