Я использую OpenGL для игры на основе 2D, которая была разработана для разрешения 640x480 пикселей. Таким образом, настроить мой OpenGL DoubleBuffer так:OpenGL 2D doublebuffer scaling
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 640, 480, 0, 0, 1);
glDisable(GL_DEPTH_TEST);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Это работает очень хорошо, и я могу нарисовать все мои спрайты и фоновые скроллеры, используя аппаратное ускорение GL текстур. Теперь я хочу также поддерживать другие размеры окон, то есть пользователь должен иметь возможность запускать игру в 800x600, 1024x768 и т. Д. Таким образом, вся графика должна быть масштабирована до нового разрешения. Конечно, я мог бы сделать это, просто применяя коэффициенты масштабирования ко всем моим вершинам при рисовании текстур как квад. Но я не думаю, что смогу достичь идеального позиционирования в пикселях таким образом .... но идеальное позиционирование в пикселях, конечно, очень важно для 2D-игр!
Таким образом, я хотел бы спросить, если есть возможность работать со статическим 640х480 DoubleBuffer есть он масштабируется только до того, как обращается к экрану, то есть что-то вроде этого:
1) Мой DoubleBuffer будет всегда должно быть 640x480 пикселей, независимо от того, каков реальный размер окна вывода.
2) Как только я вызываю glfwSwapBuffers(), двойной буфер буфера 640x480 следует масштабировать до фактического размера окна, которое может быть меньше или больше 640x480.
Возможно ли это как-то? Я думаю, что это было бы самым простым решением для моей игры, потому что ручное масштабирование всех вершин, вероятно, даст мне некоторые проблемы, когда дело доходит до идеального позиционирования пикселей, не так ли?
Спасибо!
Спасибо, обращаясь к текстуре с помощью фреймбуфера, а затем рисуя эту текстуру с помощью масштабированного квадроцикла именно то, что я искал. Идея определения размеров пикселов в glOrtho2D() поступает непосредственно из MSDN, см. Здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/dd374282(v=vs.85).aspx – Andreas
@ Андреас: На самом деле эти «советы правильности» взяты из «Официального руководства по программированию OpenGL» (он же Красная книга), но уже давно устарели. В любом случае эти предложения применимы только в том случае, если вам требуется идеальное выравнивание пикселей. Но вам не требуется идеальное выравнивание пикселей для того, что вы хотите сделать (идеальное выравнивание пикселей требуется для таких функций, как фильтрация экрана, пост-обработка или рисование пользовательских интерфейсов). – datenwolf