Opengl multitexturing

dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 - 25 août 2005 à 20:33
cs_erazor Messages postés 85 Date d'inscription jeudi 7 février 2002 Statut Membre Dernière intervention 8 février 2007 - 28 oct. 2005 à 11:53
bonjour,



J'ai reussi a mettre en place le multitexturing avec opengl, j'obtiens
un melange homogene entre textures sur un polygone mais le
probleme est que l'eclairage se desactive des que j'utilise les
coordonnées de textures :

glMultiTexCoord2fARB( GL_TEXTURE0_ARB, u, v);



si je reviens aux coordonnées classiques avec:

glTexCoord2f( u, v);



la l'eclairage reviens, mais bien sur le multitexturing n'apparait plus!



Comment faire du multitexturing avec de l'eclairage?? Merci

13 réponses

NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
25 août 2005 à 22:59
aucune idée, je n'ai pas vraiment eu le temps de chercher.

t'as regardé le tuto de NeHe ? (nehe.gamedev.net - tutorial 22)



sinon la doc sur opengl.org



j'ai parcouru pas mal de doc sur le multitexturing il y a qques jours
mais je n'ai jamais vu ce problème (je ne cherchais pas de côté là non
plus)



je sais que dans son tuto, NeHe désactive la lumière avant d'effectuer
le multitexturing et la réactive après, mais ça n'a sûrement rien à
voir, je crois que c'est nécessaire pour le bump mapping...

enfin bref, j'essaie de te donner des pistes... mais je ne peux malheureusement pas t'en dire plus.



Si tu trouve un réponse, aussi conne soit elle, postes là ici, ça m'intéresse, tkx.


.:. NoRabbit .:.
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
26 août 2005 à 10:47
"Lorsqu'on applique une texture à un fragment, seule la couleur
principale est combinée aux couleurs des texels. La couleur principale
peut etre le résultat de calculs d'éclairage ou glColor" Donc
normalement il n'y a pas de problème.



Tiens, pourquoi tu utilises l'extension ARB ? Dans la 1.4, c'est par défaut. Donc on utilise

glMultiTexCoord2*(GL_TEXTURE{0..n}, x, y);



Post ton code, on verra mieux.
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
27 août 2005 à 00:28
Ben en fait je me suis inspiré d'une source existante ou il le
multitexturing est implémenté mais pas l'eclairage qui va avec! je vous
mets les paries interessantes du source:

<hr size="2" width="100%">

void initARBTextures()

{


glActiveTextureARB( GL_TEXTURE0_ARB );

//glEnable( GL_TEXTURE_2D );


glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );




glActiveTextureARB( GL_TEXTURE1_ARB );

//glEnable( GL_TEXTURE_2D );




glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB );


glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB );




glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB );


glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR );




glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE );


glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR );




glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PRIMARY_COLOR_ARB );


glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_COLOR );

}

<hr size="2" width="100%">

j'ai un gros prb avec cette focntion ! Je la comprends que tres peu et
sur internet pas moyen de trouver de la doc qui explicite tous ces
paramètres (enfin j'ai peut etre trouvé sur le site des developpeurs
nvidia...mais faut que je telecharge un pdf qui a l'air lourd pour mon
56K) Mais cette fonction donne un truc trop bizarre au rendu! En fait
pour tester j'ai decider de melanger 2 textures sur tous les polygones
d'un objet et ce qui se passe c'est que toutes les zones qui sont
normalement eclairées sont recouverte de la 1ere texture et toutes les
zones d'ombres sont recouvertes par la 2eme texture! Mais il n'y a pas
d'eclairage a part cela.



Sinon g trouvé un autre systeme de paramétrage qui me donne ce que je veut en melangeant de facon homogene les 2 textures:

<hr size="2" width="100%">void initARBTextures()

{


glActiveTextureARB( GL_TEXTURE0_ARB );

//glEnable( GL_TEXTURE_2D );


glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );




glActiveTextureARB( GL_TEXTURE1_ARB );

//glEnable( GL_TEXTURE_2D );






glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);


glTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_INCR);

}

<hr size="2" width="100%">il prends bcp moins de place! Mais la encore de nouveaux parametres qui m'inspirent pas tellement...





la fct de rendu ne contiient rien de special a par cette fct la
glMultiTexCoord2*(GL_TEXTURE{0..n}, x, y); qui remplace le classique
glTexCoord2f(u,v);



Sinon vous voyez que dans les fcts precedentes g mis tous les

glEnable( GL_TEXTURE_2D ); en commentaires . Je n'ai pas compris du
tout pourquoi dans tous les codes implementant le multitexturing il
reactivait constamment les textures 2D! Surtout que en ne les mettant
pas je n'ai precu aucun changement!



Et la en plus je viens de m'aprecevoir que j'avais laissé un

glBindTexture(GL_TEXTURE_2D,nom[mapFaces[a].matID]);

avant le dessin des polys et c'est ce qui me permet d'obtenir un
melange homogene parce que si je l'enleve je ne vois plus que une
texture! Bref c la mega bidouille ce truc, j'y comprends que dalle! 8O





Et l'extension ARB je suis obligé de l'utiliser pour a ctiver les
textures 0 et 1 et pour paramétrer le melange...efin je crois...



Je suis aller voir le tut de nehe mais g rien trouvé d'interessant pour
resoudre mon prb...et sur opengl.org c'est le néant complet!! Mais
qu'est ce que c'est que ce site! Les seules liens utiles sont tous
morts! Le lien pour la derniere version de opengl mort aussi!



Mais merci pour votre soutient!
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
27 août 2005 à 09:17
Bon alors deja, l'extension ARB, du balais :) partout !!



Sinon voila ce que me dit le red book:

Tu vas voir que ya pas bcp de point commun avec ton code.



GLuint texNames[2]; // ca, ca va

glGenTextures(2, texNames);
glBindTexture(GL_TEXTURE_2D, texNames[0]);



// en fait on créer d'abord une texture classique qu'on assigne a la fin comme texture0 pour le multitexturage.



glTexImages2D(GL_TEXTURE_2D, 0 ,GL_RGBA, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, ton_image1);

// bon je passe sur les glTexParameter...GL_NEAREST et GL_REPEAT etc...


glBindTexture(GL_TEXTURE_2D, texNames[1]);

glTexImages2D(GL_TEXTURE_2D, 0 ,GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, ton_image2);



// bon maintenant on active le multi texturage:

glActiveTexture(GL_TEXTURE0): // unité 0 de texturage

glEnable(GL_TEXTURE_2D); // on l'active

glBindTexture(GL_TEXTURE_2D, texNames[0]); // on la lit a la première texture

glTexEnvi(...., GL_REPLACE);



glActiveTexture(GL_TEXTURE1); // on sélectionne l'unité 1

glEnable(GL_TEXTURE_2D); // on l'active

glBindTexture(GL_TEXTURE_2D, texNames[1]); // on la définie.

glTexEnvi(..., GL_MODULATE); // mode d'application



voila et les commentaires qu'ils donnent avec (pas tous):

Dans la première partie, deux objets de texture ordinaires sont mis en
place. Dans la deuxième partie, les deux objets de texture sont
utilisés pour composer deux unités de texture.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
27 août 2005 à 13:31
faut que tu me dises où trouver le header gl.h qui contient les fonctions de multitexturing.

J'ai trouvé nul part la dernière version de cet header.



J'ai trouvé une sorte de pack qui contient dex fichiers (glprocs.c et
glprocs.h) à inclure dans nos projets qui charge automatiquement les
extensions contenues dans les versions 1.2 ; 1.3 ; 1.4 et 1.5



dans tous les cas, il faut charger cette extension.

.:. NoRabbit .:.
0
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
27 août 2005 à 13:33
pour ceux que ça intéresse, l'adresse de ce pack : http://oss.sgi.com/projects/ogl-sample/sdk.html (site officiel)

.:. NoRabbit .:.
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
27 août 2005 à 16:00
Ah bon pas d'extensions ARB! Ben tant mieux alors je vais essayer...



Mias le prb c'est que devcpp ne trouve pas de fct

glActiveTexture() dans les headers de opengl il ne trouve que glActiveTextureARB() !!



Et le code qsue tu me propose c'est le mien suaf que tu remplace la fct
glActiveTextureARB() par glActiveTexture() !! Sinon pour la creation de
la texture je fais toujours la methode classique...



NoRabbit les fcts extensions de opengl sont defines dans l'header glext.h dans le repertoire include\gl si tu as devcpp.



Mais en fait tout leprb du non eclairage setrouve dans le prametrage du
multitexturing dans la fct initARBtextures() que je vous est donné
parce que des que je ne l'utilise plus je n'ai plus de multitexturing
mais l'eclairage est la...
0
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
27 août 2005 à 16:50
ok pour glext.h, je sais. Ce que je cherchais à
comprendre, c t comment accéder au multitexturing sans charger les
fonctions nécessaires. Je crois maintenant qu'il est toujours
nécessaire de les charger.



Pour ton problème avec la lumière, tu dois avoir raison, c dans cette fonction et plus précisément cette fonction: "
glTexEnv*(...)"

faut faire des tests

http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/texenv.html



.:. NoRabbit .:.
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
28 août 2005 à 10:58
oui je confirme le prb venait de cette fct, j'ai recherché de la doc
sur glTexEnv* et j'ai reussi a la paramétré de facon a avoir un melange
des 2 textures tout en gardant l'eclairage...



Mais le nouveau prb c'est que c'est hyper sombre! Pas de trouver
l'interrupteur! lol! J'ai beau changer les caractérsitiques
speculaires, ambientes du matériau et de la lumiere, rien y fait...



Comment faites vous pour augmenter la luminosité d'une scene?
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
29 août 2005 à 15:21
Nan en fait c'etait un coup de chance... finalement ca va pas du tout comme je veux...

Je dois pas etre sur le bonne voie..merci quand meme...
0
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
29 août 2005 à 20:24
ok, si tu trouves, ne nous oublies pas ! ;)

.:. NoRabbit .:.
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
29 août 2005 à 21:18
ca marche!
0
cs_erazor Messages postés 85 Date d'inscription jeudi 7 février 2002 Statut Membre Dernière intervention 8 février 2007
28 oct. 2005 à 11:53
ba alors, mon collegue dletozeun, tu n'as toujours pas reussi a resoudre ce probleme?
0
Rejoignez-nous