Я использую свою графику iPhone с помощью OpenGL. В одном из моих проектов мне нужно использовать изображение, которое мне нужно использовать в качестве текстуры в OpenGL. Изображение .png
- это размер 512 * 512
, его фон прозрачный, а изображение имеет синюю синюю линию в центре.Что мы можем использовать вместо смешивания в OpenGL ES?
Когда я применяю свое изображение к многоугольнику в OpenGL, текстура выглядит так, как если бы прозрачная часть изображения была черной, а густая синяя линия видна как сама. Для того, чтобы удалить черную часть, я использовал смешение:
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
Тогда моя черная часть текстуры на полигоне удаляется. Теперь видна только синяя полоса. Таким образом, проблема решена.
Но я хочу добавить много таких образов и сделать много объектов в OpenGL. Я могу это сделать, но частота кадров очень низкая, когда я добавляю все больше изображений к объектам. Но когда я комментирую смешение, частота кадров нормальная, но изображения не видны.
Поскольку у меня нет хороших кадров, графика немного медленная, и я получаю шаткий эффект.
Итак:
1) Есть ли другой способ, чем смешивание, чтобы решить мою проблему?
2) Как повысить частоту кадров моего приложения OpenGL? Какие шаги необходимо предпринять для правильной реализации моей графики?
Спасибо за ваш ответ. Здесь, в моем проекте, я использую 512 * 512 текстур, с которыми почти 90% являются прозрачной частью. Таким образом, по вашим словам, кажется, что я могу уменьшить прозрачный процент текстуры, я могу увеличить скорость. Это хорошая информация для меня. Но, делая это, я получаю свои объекты чуть больше на экране iphone, как мы видим. Так что, похоже, нет другого способа, кроме смешивания в opendl inorder, чтобы удалить черную часть текстур ..? – quint
Вместо того, чтобы смешивать, вы можете попробовать альфа-тестирование, которое может быть немного быстрее, когда вам не нужно смешиваться, и просто хотите полностью непрозрачные и полностью прозрачные области. 'GlEnable (GL_ALPHA_TEST); glAlphaTest (GL_LESS, 1.0) 'отбрасывает все пиксели, которые не являются 100% непрозрачными. Я бы не ожидал, что это придаст большой прирост производительности, поскольку рендеринг на основе плитки по-прежнему не может отбрасывать скрытые пиксели так, как может, когда альфа не происходит. – codewarrior
По сути, прозрачность стоит дорого на iPhone, потому что аппаратное обеспечение оптимизировано для полностью непрозрачных текстур. Вам нужно свести к минимуму использование смешивания и альфы, чтобы повысить производительность. Если вы не можете использовать только полностью непрозрачные текстуры, вам нужно разбить вещи так, чтобы их использовали только те части, которые действительно нуждаются в смешении, а остальная часть сцены сначала отображается с отключением смешивания. – codewarrior