OpenGL Texture de la transparence ne fonctionne pas
Je vais avoir une texture OpenGL qui est lié à un simple quad.
Mon problème est le suivant: Ma texture est 128x128 pixels de l'image. Je suis le seul à remplir sur 100x60 pixels sur l'image, les autres pixels sont transparentes. Je l'ai enregistré dans un .fichier png. Quand je dessine, la partie transparente de la bindings texture est blanche.
Disons que j'ai un arrière-plan. Lorsque je dessine ce nouveau quad sur cette toile de fond que je ne peux pas voir à travers la partie transparente de mon texture.
Des suggestions?
Code:
//Init code...
gl.glEnable(gl.GL_TEXTURE_2D);
gl.glDisable(gl.GL_DITHER);
gl.glDisable(gl.GL_LIGHTING);
gl.glDisable(gl.GL_DEPTH_TEST);
gl.glTexEnvi(gl.GL_TEXTURE_ENV, gl.GL_TEXTURE_ENV_MODE, gl.GL_MODULATE);
//Drawing code...
gl.glBegin(gl.GL_QUADS);
gl.glTexCoord2d(0.0, 0.0);
gl.glVertex3f(0.0f, 0.0f, 0.0f);
gl.glTexCoord2d(1.0, 0.0);
gl.glVertex3f(1.0f, 0.0f, 0.0f);
gl.glTexCoord2d(1.0, 1.0);
gl.glVertex3f(1.0f, 1.0f, 0.0f);
gl.glTexCoord2d(0.0, 1.0);
gl.glVertex3f(0.0f, 1.0f, 0.0f);
gl.glEnd();
J'ai essayé à peu près tout, à partir de l'activation de mélange à changement de GL_REPLACE, cependant je ne peux pas le faire fonctionner.
Edit:
//Texture. Have tested both gl.GL_RGBA and gl.GL_RGB8.
gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, (int)gl.GL_RGBA, imgWidth, imgHeight,
0, gl.GL_BGR_EXT, gl.GL_UNSIGNED_BYTE, bitmapdata.Scan0);
Vous devez vous connecter pour publier un commentaire.
Vérifier que la texture est de format RGBA, et permettre de mélange et de définir le mélange func:
Et dessiner la texture. Si la texture n'est pas RGBA, il n'est pas l'alpha et l'fusion ne fait rien.
EDIT: Depuis que vous avez posté votre code, je peux un spot d'une grave erreur:
Vous dites GL que la texture a internalFormat RGBA, mais les données bitmap a BGR format, donc, pas de alpha à partir de vos données de texture. Cela suppose alpha = 1.0.
De la corriger, de la charge de votre PNG avec RGBA format et l'utilisation GL_RGBA comme internalFormat et les paramètres de format de glTexImage2D.
gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA, imgWidth, imgHeight, 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, bitmapdata.Scan0);
When I'm drawing, the transparent part of the binded texture is white.
Cela signifie que votre PNG-analyseur converti les régions transparentes à la valeur de blanc. Si vous voulez rendre transparente couches avec OpenGL vous ne dépendent généralement de la texture des fichiers de tenir la transparence, mais plutôt d'utiliser les
GLBlendFunc()
. Plus d'informations ici:Aussi, devrait vous rendre à un tampon de trame et copie le résultat dans une texture, vérifier que le tampon de trame a alpha activé. Par exemple lors de l'utilisation de osgViewer ce peut être réalisée par (le faire avant d'appeler setUpViewInWindow):
et sous qt, il devrait fonctionner avec (à partir de http://forum.openscenegraph.org/viewtopic.php?t=6411):
Normalement il est préférable de rendre directement dans un tampon de trame, mais je suis alonge le présent tout en préparant un code existant et au début c'était très difficile de trouver cela.