2009-10-26 4 views
1

Мне нужно нарисовать фон для 2D-прокрутки прокрутки пространства. Мне нужно реализовать 3 слоя звезд: одна далекая туманность (движущаяся очень медленно) на заднем плане, один слой дальних звезд (медленный) и один слой близких звезд (движущийся нормальный) поверх других двух.OpenGL ES. Прокрутка 3-х слойных текстур звезд дает мне 60 -> 40 FPS

Способ, которым я впервые попробовал это, использовал 3 текстуры 320 x 480, которые были прозрачными png звезд. Я использовал GL_BLEND и SRC_ALPHA, ONE_MINUS_SRC_ALPHA.

Результаты были невелики даже на 3GS. На устройствах первого поколения FPS упал до 40..50, поэтому я думаю, что я делаю это неправильно.

Когда я отключу GL_BLEND, все работает отлично даже на устройствах первого поколения, а FPS снова возвращается к 60 ... так что это должен быть тот факт, что я пытаюсь перефразировать большие прозрачные текстуры.

Проблема в том, что я не знаю, как сделать это какой-то другой способ ...

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

Есть ли другой подход к проблеме смешивания? Как я могу ускорить процесс рендеринга? Ответ на один большой текст (плитка)?

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

ответ

5

Я не знаю, как вы хотите, чтобы ваши звезды выглядеть, но вы можете попробовать, чтобы переместить их из текстуры в геометрии с помощью GL_POINTS в DrawElements или DrawArrays может просто заменить два верхних слоя со слоями геометрия. Вы можете манипулировать точками, используя PointSize, PointSizePointerOES и PointParameter, чтобы изменить рендеринг точек.

4

Возможно, вы захотите использовать многоструйное текстурирование, чтобы убедиться, что это ускоряет его. Каждой стадии мультиструктуры может быть назначена уникальная матрица преобразования, поэтому вы должны иметь возможность переводить каждый слой с разной скоростью.

Я считаю, что все модели iPhone поддерживают две стадии текстуры, поэтому вы можете объединить два своих слоя в один призыв к рисованию. Вам все равно придется прибегать к смешению третьего слоя.

Также обратите внимание, что альфа тестирование может быть быстрее, чем альфа смешивание.

Удачи вам!

1

Задняя туманность должна быть непрозрачной; все остальное нарисовано поверх него, и я полагаю, что единственное, что стоит за ним, это черный. Кроме того, у prideout есть точка: если ваши звездные слои могут иметь эффективную 1-битную альфу, это определенно то, что вы можете попробовать. В противном случае метод GL_POINTS, описанный Харальдом, будет работать.