Après le chargement d'une image, j'ai les octets individuels pour chaque canal chargé dans un tableau de caractères non signés. Il est passé à une fonction qui le projette comme une texture sur un quad. Tout semble fonctionner correctement, sauf le canal alpha, qui apparaît comme la couleur de fond. J'utilise OpenGL pour dessiner l'image. Aurais-je avantage à ajouter un mécanisme de stratification? Aussi, comment puis-je obtenir l'effet transparent que je veux?Dessiner le canal alpha correctement dans OpenGl
Note: Ceci est le code que j'ai besoin de sentiment a changé:
void SetUpView()
{
// Set color and depth clear value
glClearDepth(1.f);
glClearColor(1.f, 0.f, 0.f, 0.f);
// Enable Z-buffer read and write
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glDepthMask(GL_TRUE);
glEnable (GL_BLEND);
glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
// Setup a perspective projection
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.f, 1.f, 1.f, 500.f);
};
De plus, voici le code pour rendre le quad.
void DrawTexturedRect(RectBounds *Verts, Image *Texture)
{
glBindTexture(GL_TEXTURE_2D, GetTextureID(Texture));
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelZoom(1, -1);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 1.0);
glVertex3f(Verts->corners[0].x, Verts->corners[0].y, Verts->corners[0].z);
glTexCoord2f(1.0, 1.0);
glVertex3f(Verts->corners[1].x, Verts->corners[1].y, Verts->corners[1].z);
glTexCoord2f(1.0, 0.0);
glVertex3f(Verts->corners[2].x, Verts->corners[2].y, Verts->corners[2].z);
glTexCoord2f(0.0, 0.0);
glVertex3f(Verts->corners[3].x, Verts->corners[3].y, Verts->corners[3].z);
glEnd();
};
La classe Image contient un tableau de caractères non signés, obtenu à l'aide d'OpenIL.
code correspondant:
loaded = ilLoadImage(filename.c_str());
ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
unsigned char *bytes = ilGetData();
//NewImage is an instance of an Image. This is returned and passed to the above function.
NewImage->data = bytes;
Problem http://img375.imageshack.us/img375/9585/j120192.png
Merci
Données insuffisantes. Vous n'avez pas affiché la routine de chargement de texture et vous n'avez pas montré la routine de rendu réelle. – SigTerm
Okay, j'ai essayé d'éclaircir ce qui se passe dans la boucle de rendu. – Jeff
Aussi, comment installez-vous OpenGL? Êtes-vous sûr de vouloir utiliser le canal alpha (par exemple, le format de pixel si vous utilisez le glut, GLUT_RGBA si vous utilisez le glut)? – sbk