Прокрутка/зумирование сцены в OpenGL и подразделение

Мы должны разработать сцену прокрутки/зумирования в OpenGL ES на Android, очень похожую на уровень в Angry Birds, но больше похожую на уровень в World Of Goo. Больше похоже на последний, поскольку мир будет состоять не из повторяющихся слоев, как в Angry Birds, а из большого изображения. Поскольку сцену нужно прокручивать/масштабировать, и поэтому большая ее часть не будет видна, мне стало интересно, как наиболее эффективно реализовать рендеринг, ориентируясь только на окружение (т.е. не на объекты внутри мира, а на фоновые слои).

Мы будем использовать ортографическую проекцию.

Первое, что приходит на ум, это создание большого прямоугольника с 4 вершинами в размере мира, на который накладывается текстура фона, и перевод/масштабирование его с помощью glTranslatef / glScalef. Однако я задался вопросом, не будет ли невидимая область за пределами границ экрана все еще рендериться OpenGL, поскольку она не выбраковывается (вы потеряете и видимую область, поскольку есть только 4 вершины). Поэтому было бы эффективнее разделить этот прямоугольник на части, чтобы невидимые прямоугольники меньшего размера можно было отбраковывать?

Другим вариантом было бы создание прямоугольника с 4 вершинами, который заполнил бы экран, а затем перемещение фона путем изменения его текстурных координат. Однако, я думаю, мы столкнемся с проблемами при создании больших миров, учитывая ограничение на размер текстуры. Это кажется хорошей реализацией для повторяющихся фонов, как в AngryBirds.

Может быть, есть другой способ...?

Если у кого-то есть идея, как это можно сделать в AngryBirds / World of Goo, пожалуйста, поделитесь, я буду рад услышать. Кажется, они реализовали систему, которая позволяет перемещать и масштабировать мир очень (WorldOfGoo = ОЧЕНЬ) плавно.

9
задан Will Kru 30 January 2012 в 19:50
поделиться