iPhone OpenGL ES неправильное альфа-смешение - PullRequest
4 голосов
/ 09 июля 2009

У меня проблема с неправильными результатами альфа-смешивания с openGL ES на iPhone.

Это мой код для создания объекта текстуры:

glGenTextures(1, &tex_name);
glBindTexture(GL_TEXTURE_2D, tex_name);
glTextImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex_width, tex_height, GL_RGBA, GL_UNSIGNED_BYTE, tex_data);

'tex_data' загружается из необработанных данных RGBA8888, упакованных с помощью zlib. Он загружается так, как должен, который я проверил с помощью отладчика.

Это мой код для настройки текстуры перед рендерингом:

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

glBindTexture(GL_TEXTURE_2D, tex_name);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

Я загрузил образец того, что я ожидал и что у меня здесь: образец . В образце большая часть текстуры снизу темно-черного цвета с непрозрачностью 70%. Однако openGL отображает его как серый. Эта проблема затрагивает все мои текстуры, с которыми я смешиваюсь.

Я протестировал код на окнах с использованием OGLES PVRVFrame, и результаты были ожидаемыми: черный цвет отображается как черный.

Ответы [ 2 ]

4 голосов
/ 09 июля 2009

Нашел проблему. Я забыл установить для непрозрачного свойства CAEAGLLayer EAGLView значение YES.

0 голосов
/ 09 июля 2009

Поможет ли это? glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) Я думаю, что это просто смешивает два вместо того, чтобы смешать оба на фоне.

Извините, если я не понимаю.

...