Probleme de transparence

Sebaplus Messages postés 7 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 25 avril 2003 - 29 juil. 2002 à 15:07
txprog Messages postés 10 Date d'inscription mercredi 31 juillet 2002 Statut Membre Dernière intervention 6 août 2002 - 2 août 2002 à 22:12
Salut, j'ai un problème avec la transparence: lorsque je regarde la face transparente à travers une face opaque, je la vois qu'en meme.
Pourtant je dessine ma face transparente entre:
glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glColor4f(1.0f,1.0f,1.0f,1.0f);
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
et
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
Comment faire ?
Une autre petite question: Lorsque j'utilise le chargement de texture jpeg, je n'ai plus l'affichage de Font. Est ce que quelqu'un a le meme problème ?
D'avance merci !
@+
Sebaplus

3 réponses

txprog Messages postés 10 Date d'inscription mercredi 31 juillet 2002 Statut Membre Dernière intervention 6 août 2002
31 juil. 2002 à 22:12
Salut, il me fau plus de précision, la face opaque, tu la dessine avant ou après le code que tu a donné, sinon, peu-tu donner le code complet ? En tous cas, pour info, la transparence est qqchose de très dur à gérer, l'algo à mettre en place est le suivant :
1 : tracer tout les objets opaque, ainsi que ceux dont la transparence est tout ou rien (texture avec mask)
2 : trier les objets restant (translucide, ayant une transparence >0 et <1), de facon à les afficher du plus profond au plus près de l'écran.

[TiTo]
0
Sebaplus Messages postés 7 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 25 avril 2003
1 août 2002 à 10:43
Salut,
Je dessine ce qui est opaque avant ce qui est transparent. La transparence marche sauf lorsqu'une face transparente est derrière une face censée être opaque.
Voici une partie du code:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
glLoadIdentity();
gluLookAt(camx,camy,camz,vuex,vuey,vuez,0,1,0);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT1,GL_POSITION,LightPosition);
glEnable(GL_LIGHT1);
glBindTexture(GL_TEXTURE_2D, texture[1][0]);
glBegin(GL_QUADS); //partie opaque
glNormal3f( 0.0f, 1.0f, 0.0f);
glTexCoord2i(0,0);glVertex3i(0,0,0);
glTexCoord2i(taille/4,0);glVertex3i(taille,0,0);
glTexCoord2i(taille/4,taille/2);glVertex3i(taille,0,taille);
glTexCoord2i(0,taille/2);glVertex3i(0,0,taille);
glEnd();

glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
glLoadIdentity();
gluLookAt(camx,camy,camz,vuex,vuey,vuez,0,1,0);
i=int(GetTickCount() * 0.01) % 8;
j=float(atan((10-camx)/(1-camz))*180/PI);
glTranslated(10,0,1);
glRotated(j,0,1,0);
glColor4f(1.0f,1.0f,0.0f,1.0f);
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glBindTexture(GL_TEXTURE_2D, texture[i+2][0]);
glBegin(GL_QUADS); //partie transparente
glNormal3f( 0.0f, 2.0f, -1.0f);
glTexCoord2i(0,1);glVertex3i(-1,0,0);
glTexCoord2i(0,0);glVertex3i(-1,4,0);
glTexCoord2i(1,0);glVertex3i(1,4,0);
glTexCoord2i(1,1);glVertex3i(1,0,0);
glEnd();
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);

Il y a d'autres objets transparents et opaque. Mon programme se trouve en bas, sur cette page: http://membres.lycos.fr/sebaplus/creations/creations.htm
On voit sur le screenshot les étoiles transparentes à travers le sol.
Merci de te pencher sur mon problème.
@+
Sebaplus
0
txprog Messages postés 10 Date d'inscription mercredi 31 juillet 2002 Statut Membre Dernière intervention 6 août 2002
2 août 2002 à 22:12
Salut.
J'ai télécharger ta démo de ton moteur 3d
c normal que tes étoiles soit affiché par dessus les faces opque
dans ton code ci dessous, la 2ème partie de ton code, 2ème ligne, tu désactive le GL_DEPTH_TEST. si tu le désactive, comment peut-il savoir si l'étoile est devant ou derrière les faces opaques ? en fait le truc, tu va tester si la face est devant ou derrière un autre objet, mais tu ne va pas ecrire ta face dans le ZBuffer.
Tu remplaces la ligne glDisable(GL_DEPTH_TEST) par glDepthMask(GL_FALSE). Ceci va desactiver l'écriture sur le ZBuffer, mais va quand même faire le test. Ensuite, pour réactiver l'écriture sur le ZBuffer, tu fait glDepthMask(GL_TRUE); Voila, mail-moi un screen pour me montrer le résultat quand tu aura fai les changement sur txprog@hotmail.com

@+
[TiTo];-P
0
Rejoignez-nous