Что мы можем использовать вместо смешивания в OpenGL ES? - PullRequest
1 голос
/ 30 марта 2010

Я делаю свою графику iPhone, используя OpenGL. В одном из моих проектов мне нужно использовать изображение, которое мне нужно использовать в качестве текстуры в OpenGL. Изображение .png имеет размер 512 * 512, его фон прозрачный, а в центре изображения - толстая синяя линия.

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

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

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

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

Поскольку у меня нет хороших кадров в секунду, графика немного медленная, и я получаю шаткий эффект.

Итак:

1) Есть ли другой метод, кроме смешивания, для решения моей проблемы?

2) Как улучшить частоту кадров моего приложения OpenGL? Какие все шаги необходимо предпринять, чтобы правильно реализовать мою графику?

1 Ответ

0 голосов
/ 30 марта 2010

Если вы хотите иметь прозрачные части объекта, единственный способ состоит в том, чтобы смешать пиксельные данные для треугольника с тем, что в данный момент находится в буфере (то, что вы сейчас делаете). Обычно, при использовании сплошных текстур, новые данные пикселей для треугольника просто перезаписывают то, что когда-либо было в буфере (до тех пор, пока оно находится ближе, т.е. z-буфер). Но с прозрачностью, он начал смотреть на прозрачность этой части текстуры, смотреть на то, что стоит за ней, вплоть до чего-то твердого. Затем объедините все эти слои поверх прозрачного материала, пока не получите окончательное изображение.

Если все, что вам нужно для прозрачности, это что-то вроде простого спрайта дерева и удаления «материала» с боков ствола и т. Д. Тогда вам может быть лучше предоставить более сложную геометрию, которая фактически определяет форму багажник и при этом не надо заморачиваться с прозрачностью.

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

...