Open GL multitexturing et la matrice de textures....

Open GL multitexturing et la matrice de textures.... - Programmation

Marsh Posté le 19-07-2001 à 01:56:46    

voilà j'ai le code suivant (pas bien beau je vous l'accorde mais bon c'est essentiellement pour des tests ;)):
 
void
draw()
{  
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 GLfloat light_position[]={0.0, 1.0, 1.0, 0.0};
 
 glMatrixMode(GL_TEXTURE);
 glLoadIdentity();
 glTranslatef(transX, transY,0);
 
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 
 (*glActiveTextureARB)(GL_TEXTURE0_ARB);
 glBindTexture(GL_TEXTURE_2D, tex_name[WALL_ID]);
 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
 glEnable(GL_TEXTURE_2D);
 
 (*glActiveTextureARB)(GL_TEXTURE1_ARB);
 glBindTexture(GL_TEXTURE_2D, tex_name[LIGHTMAP_ID]);
 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
 glEnable(GL_TEXTURE_2D);
 
 
 
 glBegin(GL_QUADS);
  (*glMultiTexCoord2fARB)(GL_TEXTURE0_ARB, 0.0, 0.0);
  (*glMultiTexCoord2fARB)(GL_TEXTURE1_ARB,0.0, 0.0);
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(-5.0, -5.0, -10.0);
 
  (*glMultiTexCoord2fARB)(GL_TEXTURE0_ARB,0.0, 1.0);
  (*glMultiTexCoord2fARB)(GL_TEXTURE1_ARB,0.0, 1.0);
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(-5.0, 5.0, -10.0);
 
  (*glMultiTexCoord2fARB)(GL_TEXTURE0_ARB,1.0, 1.0);
  glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0, 1.0);
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(5.0, 5.0, -10.0);
 
  (*glMultiTexCoord2fARB)(GL_TEXTURE0_ARB,1.0, 0.0);
  (*glMultiTexCoord2fARB)(GL_TEXTURE1_ARB,1.0, 0.0);
  glNormal3f(0.0, 0.0, 1.0);
  glVertex3f(5.0, -5.0, -10.0);
 glEnd();
 
 glDisable(GL_TEXTURE_2D);
 
 SwapBuffers(dc);
}
 
et j'aimerais savoir pourquoi lorsque j'applique une translation sur la matrice de textures seule la lightmap voit sa position modifiée ? A priori si j'en crois le redbook toutes les coordonnées de textures doivent être multipliées par la matrice de textures, donc la texture du mur devrait se déplacer aussi....


---------------
Une brève histoire du GPU -  PS5, Xbox Series X : la fin du bond technologique
Reply

Marsh Posté le 19-07-2001 à 01:56:46   

Reply

Marsh Posté le 19-07-2001 à 02:18:28    

toutes les coordonnées (au sens x, y, ...) des textures sont tranformées par ta matrice.  
 
à chaque stage (GL_TEXTURE0_ARB, GL_TEXTURE1_ARB, GL_TEXTUREX_ARB ...) de mapping correspond une matrice. il faut donc spécifier ta matrice pour chaque stage.
 
comment ? heu ... :) je n'ai fait ça que sous dx. tu peux essayer un glActiveTextureARB(GL_TEXTURE1_ARB) et après ça un glMatrixMode() standard. ou peut-être y'a-t-il des constantes spécifiques qui permettent de faire glMatrixMode(GL_TEXTURE0) par ex.

Reply

Marsh Posté le 19-07-2001 à 02:26:07    

http://berkelium.com/OpenGL/GDC99/multitexture.html
 
" When you call glBindTexture(), the texture object is bound to the active texture unit specified by texture.  Likewise, enabling and disabling textures and modifying texture environment, texture matrix and texgen modes affect only the active texture unit. Modifying a texture array or parameters affects the texture object bound to the active texture unit, but such changes are visible to other texture units if the texture is bound to multiple texture units simultaneously. "

Reply

Marsh Posté le 19-07-2001 à 02:28:40    

Et bien merci beaucoup tu as raison  :jap: !
Donc pour ceux que ça intéresse, comme youdontcare vient de le dire il suffit de mettre le glMatrixMode(GL_TEXTURE) après le (*glActiveTextureARB)(GL_TEXTUREX_ARB); pour modifier uniquement la texture de l'unité de texture X. Chaque unité de texture a donc une matrice de textures associée c'est très fort.
 
Encore merci !


---------------
Une brève histoire du GPU -  PS5, Xbox Series X : la fin du bond technologique
Reply

Sujets relatifs:

Leave a Replay

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