Mouvement de texture

aymardhb9 Messages postés 5 Date d'inscription mercredi 14 décembre 2005 Statut Membre Dernière intervention 29 avril 2006 - 23 avril 2006 à 04:06
aymardhb9 Messages postés 5 Date d'inscription mercredi 14 décembre 2005 Statut Membre Dernière intervention 29 avril 2006 - 24 avril 2006 à 11:14
Slt , j'ai un petit pb.
En fait , j'ai texturé une plaque sur un terrain pour donner une impression de lac mais j'aimerais faire bouger la texture , pour simuler un mouvement de vague ou de courant , j'ai appliquer la texture avec le code suivant :

static const float pt[8][3] = { {-1,-1,-1}, {1,-1,-1}, {1,-1,1}, {-1,-1,1}, {-1,1,-1}, {1,1,-1}, {1,1,1}, {-1,1,1} };
static const int f[6][4] = { {0,1,2,3}, {5,4,7,6}, {1,5,6,2}, {0,4,7,3}, {3,2,6,7}, {0,4,5,1} };
static const float n[6][3] = { {0,-1,0}, {0,1,0}, {1,0,0}, {-1,0,0}, {0,0,1}, {0,0,-1} };
static const float uv[4][2] = { { 0, 0}, {0,1}, {1,1}, {1,0} };
int i,j;
glScalef(600.0,-900.0,-20.0);
glTranslatef( -0.1f, -0.1f, 50.0f);
glEnable(GL_TEXTURE_2D);
for(i=0;i<6;i++)
{
glDisable(GL_LIGHTING);
glNormal3f( n[i][0], n[i][1], n[i][2] );
for(j=0;j<4;j++)
{
glBindTexture(GL_TEXTURE_2D,sbi1);
glBegin(GL_QUADS);
glTexCoord2f( uv[j][0], uv[j][1] );
glVertex3f( pt[ f[i][j] ][0], pt[ f[i][j] ][1], pt[ f[i][j] ][2] );
}
glEnd();
}
}

6 réponses

spiky31 Messages postés 106 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 11 février 2008
23 avril 2006 à 10:07
salut

il ya deux solutions :

1 : la plus simple mais la mois efficace
Utiliser les matrices de texture : glMatrixMode(GL_TEXTURE)
ensuite faire des glTranslate

2 : Utiliser les textures shaders mais il faut avoir le matos qui le supporte

voila a+


Il n'y a que ceux qui font rien qui ne se trompent jamais
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
23 avril 2006 à 22:01
Mais l'efficacité ne semble pas etre sa préoccupation, sinon, on ne verrait pas le mot glBegin.

Donc utiliser la matrice de texture est la solution.
0
aymardhb9 Messages postés 5 Date d'inscription mercredi 14 décembre 2005 Statut Membre Dernière intervention 29 avril 2006
24 avril 2006 à 03:39
Finalement au lieu de construire un cube entier , j'ai juste dessiné une face et j'ai appliqué ma texture d'eau . J'ai ajouté une variable pour pouvoir faire avancé ma texture et donc faire du mouvement . Elle avance mais juste pendant quelque secondes et ensuite elle s'arrête et déforme la texture . Comment faire en sorte que le mouvement ne s'arrête pas . Voici mon code .
void Envmap::draw1()
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,sbi1);
glDisable(GL_LIGHTING);
glBegin(GL_QUADS);
static float a=0;
glTexCoord2f(a+0,0);
glVertex3f(-1,-1,1);
glTexCoord2f(a+0,1);
glVertex3f(-1,1,1);
glTexCoord2f(a+1,1);
glVertex3f(1,1,1);
glTexCoord2f(a+1,0);
glVertex3f(1,-1,1);
glEnd();
a+=0.001f;
}
0
spiky31 Messages postés 106 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 11 février 2008
24 avril 2006 à 07:53
essaye ca :

void Envmap::draw1()
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,sbi1);

//glDisable(GL_LIGHTING); // inutile pas activé par defaut

glBegin(GL_QUADS);

static float a=0.0f;

glMatrixMode(GL_TEXTURE);
glPushMatrix();
glTranslatef(a,0.0f,0.0f);
glMatrixMode(GL_MODELVIEW); // si tu veux modifier ta scene

glTexCoord2f(0.0f,0.0f);
glVertex3f(-1.0f,-1.0f,1.0f);
glTexCoord2f(0.0f,1.0f);
glVertex3f(-1.0f,1.0f,1.0f);
glTexCoord2f(1.0f,1.0f);
glVertex3f(1.0f,1.0f,1.0f);
glTexCoord2f(1.0f,0.0f);
glVertex3f(1.0f,-1.0f,1.0f);

glMatrixMode(GL_TEXTURE);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);

glEnd();

a+=0.001f;
}


Il n'y a que ceux qui font rien qui ne se trompent jamais
0

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

Posez votre question
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
24 avril 2006 à 10:09
Apres tu rajoutes un timer au lieu de ce "a+=0.001f;".

Pour ton truc a toi, le pb vient de la création de ta texture, tu as
pas du mettre les bons paramètres. Faut mettre l'option REPEAT dans la
fonction glTexParameter*.
0
aymardhb9 Messages postés 5 Date d'inscription mercredi 14 décembre 2005 Statut Membre Dernière intervention 29 avril 2006
24 avril 2006 à 11:14
Avec les Matrix mode , il n'ya plus de mouvement , mais par contre j'ai modifié dans ma fonction de texture en faisant GL_REPEAT comme luthor m'a dit et ça marche . je vous contacte si ya d'autres pbs . Merci .
0
Rejoignez-nous