2012-04-05 2 views
1

Я новичок в OpenGL ES 1.1 для iPhone. Сегодня я попытался нарисовать текстуру png на черном фоне (текстура включает альфа-канал), но результат отличается от исходного png-файла.iPhone - OpenGL ES 1.1 - Alpha Blend делает текстуру неправильным цветом

Результат на iPhone & Simulator:

enter image description here

Выключайте освещение:

enter image description here

Это должно быть (Ярче & более размытый):

enter image description here

Источник Texture файла:

enter image description here

Это исходный код я использую:

//Setup: 
glEnable(GL_ALPHA_TEST); 
glEnable(GL_BLEND); 
glAlphaFunc(GL_GREATER,0.01); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glEnable(GL_LIGHTING); 
glEnable(GL_LIGHT0); 
static const GLfloat light0Ambient[] = {1.0, 1.0, 1.0, 1.0}; 
static const GLfloat light0Diffuse[] = {1.0, 1.0, 1.0, 1.0}; 
static const GLfloat light0Position[] = {0.0, 0.0, 10.0}; 
glLightfv(GL_LIGHT0, GL_AMBIENT, (const GLfloat *)light0Ambient); 
glLightfv(GL_LIGHT0, GL_DIFFUSE, (const GLfloat *)light0Diffuse); 
glLightfv(GL_LIGHT0, GL_POSITION, (const GLfloat *)light0Position); 
glEnable(GL_TEXTURE_2D); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glEnableClientState(GL_NORMAL_ARRAY); 

Drawing Код:

glBindTexture(GL_TEXTURE_2D, OYTextID); 
glVertexPointer(3, GL_FLOAT, 0, GUI_Vertices); 
glNormalPointer(GL_FLOAT, 0, GUI_Normals); 
glTexCoordPointer(2, GL_FLOAT, 0, GUI_TexCoords); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

В чем проблема сделать цвет идет не так ??

Спасибо за чтение, я ценю любую помощь. Best Regard & извините за мой английский.

+0

Вы пробовали рисовать это с выключенным освещением? Любая разница? – Mark

+0

glBlendFunc кажется ОК ... Попробуйте выключить свет, как предложил Марк. – Beppe

+0

Спасибо Beppe & Mark, я попытался выключить свет, но это не решило проблему! Пожалуйста, посмотрите изображение с обновлением :( –

ответ

5

Похоже, что ваш файл PNG уже предварительно умножил альфа. В этом случае вам необходимо установить

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); // GL_ONE instead of GL_SRC_ALPHA 
+0

Ты потрясающий человек! Спасибо тебе большое! –

 Смежные вопросы

  • Нет связанных вопросов^_^