Мозаичный рендеринг OpenGL :самый эффективный способ?

Я создаю 2D-игру на основе тайлов -как способ изучения основных «современных» концепций OpenGL. Я использую шейдеры с OpenGL 2.1 и знаком с конвейером рендеринга и тем, как на самом деле рисовать геометрию на экране -. Что мне интересно, так это лучший способ организовать тайловую карту для быстрого и эффективного рендеринга. Я подумал о нескольких возможных методах :

. 1. )Сохраните четырехугольник, представляющий один тайл, (вершины и текстурные координаты )в VBO, и визуализируйте каждый тайл с помощью отдельного вызова draw*, переводя его в правильное положение на экране и используя uniform2iдля указать местоположение в атласе текстур для этой конкретной плитки;

2. )Сохраняйте VBO, содержащий каждую плитку на экране, (уже -вычисленные экранные координаты и координаты текстурного атласа ),использование BufferSubDataдля обновления тайлов в каждом кадре, но с использованием одного вызова draw*;

3. )Сохраняйте VBO, содержащие статические NxN «фрагментов» тайлов, отрисовывая столько фрагментов тайлов, которые хотя бы частично видны на экране, и переводя их каждый в нужное положение.

*Я хотел бы держаться подальше от последнего варианта, если это возможно, если только рендеринг фрагментов 64x64 не слишком неэффективен. Тайлы загружаются в память блоками такого размера, и хотя одновременно на экране видны только 20x40 тайлов, мне пришлось бы отображать до четырех фрагментов одновременно. Этот метод также усложнил бы мой код несколькими другими способами.

Итак, какой из этих способов является наиболее эффективным способом рендеринга экрана из плиток? Есть ли лучшие методы?

10
задан genpfault 29 July 2012 в 04:03
поделиться