2009-07-08 6 views
4

J'ai un problème avec des résultats de mélange alpha incorrect avec OpenGL ES sur iPhone.iPhone OpenGL ES mélange alpha incorrect

Ceci est mon code pour créer la texture objet:

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' est chargé à partir des données brutes RGBA8888 emballées avec zlib. Il charge comme il se doit, que j'ai vérifié avec un débogueur.

Ceci est mon code pour la mise en place avant de rendre la texture:

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

J'ai téléchargé un échantillon de ce que je pensais et ce que j'ai ici: sample. Dans l'échantillon, la plus grande partie de la texture du fond est noire avec 70% d'opacité. Cependant, openGL le rend gris. Ce problème affecte toutes les textures que j'utilise avec.

J'ai testé le code sur Windows avec l'utilisation de OGLES PVRVFrame et les résultats sont comme prévu: le noir est rendu noir.

Répondre

4

J'ai trouvé le problème. J'ai oublié de définir la propriété opaque de CAEAGLLayer de EAGLView sur YES.

0

Cela aidera-t-il? glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) Je pense que cela ne fait que mélanger les deux au lieu de mélanger les deux à l'arrière-plan. Désolé, si je ne comprends pas.

Questions connexes