OpenGL -> multitexturing -> blend problem

OpenGL -> multitexturing -> blend problem - C++ - Programmation

Marsh Posté le 19-04-2006 à 03:57:20    

J'utilise le multitexturing pour mon moteur 3D.
un pbroblème se pose : mes textures sont chargées parfaitement, sur 32 bits. ( GL_RGBA )
Seulement voila ... le blending de deux textures se passe bizzarement :
 
quand j'utilise  glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND ); apres activation de ma texture,
tout se passe très bien niveau alpha, mais par contre, les couleurs sont comme "en négatif"...
(tu blanc apparait noir, et inversement...)
 
Inverser directement les couleurs de ma texture serait très handicapant pour d'autres raisons ^^ ...
 
Où doisje placer un glBlendFunc, et avec quels paramètres, pour que ca revienne à la normale ???
 
petite info : c'est du rendering par arrays, mon code ressemble donc à ca :
avec 'texs' qui est un tableau des textures GL_TEXTURE0 , GL_TEXTURE1 etc... (ou GL_TEXTURE_ARB0 , etc... comme vs voulez)
 
 

Citation :

glActiveTexture(texs[level]);
  glClientActiveTexture(texs[level]);
  glBindTexture(GL_TEXTURE_2D,glTex);
  glEnable(GL_TEXTURE_2D);
  if( level != 0 )
  {
   //glBlendFunc(GL_SRC_ALPHA,GL_ONE);
   glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );//GL_BLEND
  }
  glTexCoordPointer(2, arrTyp, 0, coordPtr);

Reply

Marsh Posté le 19-04-2006 à 03:57:20   

Reply

Marsh Posté le 19-04-2006 à 10:19:43    

il faut pas utiliser glMultiTexCoord2fARB plutot ?

Reply

Marsh Posté le 19-04-2006 à 15:11:57    

Nop  :)  glMultiTexCoord2fARB, (ou glMultiTexCoord2f, ca dépend chez qui ...), c'est pour le rendu polygone par polygone....
cad avec glBegin(GL_TRIANGLES) ou autre... et pour chaque vertex, tu précise les coordonées de chaque texture avec glMultiTexCoord2fARB.
Moi j'utilise glDrawArrays... et non glBegin & glVertex etc..
Beaucoup plus performant :)


---------------
tutos de programmation 3D :
Reply

Marsh Posté le 19-04-2006 à 15:44:18    

Mais ton multitexturing ne fonctionne pas avec ca non plus ?

Reply

Marsh Posté le 19-04-2006 à 17:36:50    

si :) d'ou le glTexCoordPointer qui définit le pointeur vers le tableau de floats qui contient les coordonées texture u,v de chaque vertex.
 
pour les polygones, je spécifie le pointeur vers le tableau de coordonées x,y,z  dans une autre partie du code.
pareil pour les normales.
 
et ca marche :) sauf le blending qui foire... je sais pas pourquoi.
 
une remarque : la ligne  
 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, BL_BLEND );
 
quand je mets
 
 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
 
j'obtiens presque ce que je veux... mis à part que la texture0 est influenée par les lumières, alors que texture1 ne l'est aps : la texture ressort dans les zones qui sont sensées etres sombres :)


---------------
tutos de programmation 3D :
Reply

Marsh Posté le 04-12-2007 à 19:38:31    

Je fais la même chose et j'ai exactement le même problème. Des news ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed