2009-07-08 6 views
4

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

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

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); 

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

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

ответ

4

Обнаружена проблема. Я забыл установить непрозрачное свойство CAEAGLLayer из EAGLView в YES.

0

Это поможет? glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) Я думаю, что это просто смешивает два, а не смешивает их с фоном.

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