низкое разрешение в OpenGL для имитации старых игр - PullRequest
6 голосов
/ 16 августа 2011

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

Взгляните, например, http://www.youtube.com/watch?v=_ELRv06sa-c, (отличная игра!)

Любой совет, помощь или пример кода будут приветствоваться.

1 Ответ

10 голосов
/ 16 августа 2011

Я думаю, что лучший способ сделать это, как вы сказали, визуализировать все в текстуру с низким разрешением (лучше всего это сделать с помощью FBOs ), а затем просто отобразить текстуру, нарисовав квадрат размером с сцену. (конечно, используя GL_NEAREST в качестве фильтра увеличения для текстуры). Возможно, вы также можете использовать glBlitFramebuffer для копирования непосредственно из FBO с низким разрешением в кадровый буфер с высоким разрешением, хотя я не знаю, можете ли вы скопировать напрямую в стандартный буфер кадров (отображаемый) таким образом.

РЕДАКТИРОВАТЬ: После просмотра спецификации для framebuffer_blit кажется, что вы можете просто скопировать из FBO с низким разрешением в кадровый буфер по умолчанию с высоким разрешением, используя glBlitFramebuffer(EXT/ARB). Это может быть быстрее, чем использование четырехугольника с отображением текстуры, поскольку он полностью обходит конвейер фрагмента вершины (хотя это было бы простым). И еще одно преимущество заключается в том, что вы также получаете буферы глубины низкого разрешения и трафарета, если это необходимо, и можете таким образом отображать содержимое высокого разрешения поверх фона низкого разрешения, что может быть интересным эффектом. Так и получилось бы так:

generate FBO with low-res renderbuffers for color and depth (and stencil)
...
glBindFramebuffer(GL_FRAMEBUFFER, lowFBO);
render_scene();
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glBlitFramebuffer(0, 0, 640, 480, 0, 0, 1024, 768, 
    GL_COLOR_BUFFER_BIT [| GL_DEPTH_BUFFER_BIT], GL_NEAREST);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...