Текстура OpenGL против FBO - PullRequest
       0

Текстура OpenGL против FBO

1 голос
/ 16 октября 2011

Я довольно новичок в OpenGL и просто хочу несколько быстрых советов. Я хочу нарисовать плиточный фон для игры. Я предполагаю, что это означает рисовать целую кучу спрайт-подобных объектов на экране. У меня около 48 столбцов в 30 строк, поэтому 1440 плиток (плитки меняются в зависимости от игры, поэтому я не могу предварительно визуализировать всю сетку).

В настоящее время при запуске я создаю 6 различных FBO (используя класс ofFbo из OpenFrameworks), которые действуют как 6 различных плиток. Затем я рисую эти буферы максимум до 1400 раз, выбирая по одному для каждой плитки. Таким образом, есть только 6 FBOS, которые просто рисуют много раз. (Буферы создаются при запуске и никогда не изменяются после создания).

for (int x=0; x<columns; x++) {
  for (int y=0; y<rows; y++) {

  // Get tile type and rotation from tile struct.
  tileNum = tile.form
  rotNum = tile.rot

  // Draw image/texture/fbo that's stored in a std vector.
  tileSet->draw(x*TILESIZE, y*TILESIZE, TILESIZE, TILESIZE);

  }
}

Я думаю, что я иду по этому пути неправильно, и мне было интересно, если кто-нибудь новый лучший / оптимальный способ сделать это. Подумайте, что-то вроде старой 8-битной видеоигры. Вот изображение моей работы в процессе.

work in progress

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

Ответы [ 2 ]

4 голосов
/ 16 октября 2011

Я не очень понимаю ваш вопрос.Текстура - это (обычно двумерное) изображение, которое может быть применено к полигонам, тогда как FBO (объект кадрового буфера) представляет собой разновидность внеэкранного буфера, который может отображаться вместо экрана, обычно используемого длявизуализировать прямо в текстуры.Так что я не понимаю, где ваш вопрос может быть как-то «текстуры против FBO», так как это довольно ортогональные концепции, и использование FBO не имеет никакого смысла в вашем примере.Может быть, вы портите FBO с VBO (объектами буфера вершин) или PBO (объектами буфера пикселей) ?Но тогда ваш вопрос все еще довольно некорректен.

РЕДАКТИРОВАТЬ: Если вы действительно используете FBO, и это только потому, что вы думаете, что они волшебным образом делают текстуру, на которую они ссылаются, для хранения ввидеопамяти, тогда будьте уверены, что текстуры всегда хранятся в видеопамяти, и использование FBO в вашем случае совершенно бесполезно.

0 голосов
/ 16 октября 2011

за то, что вы делаете, я бы порекомендовал вам просто использовать стандартную текстуру OpenGL.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...