Mapping sur un tore

saprobionte Messages postés 8 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 5 avril 2006 - 6 mars 2006 à 18:08
saprobionte Messages postés 8 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 5 avril 2006 - 8 mars 2006 à 17:57
Bonjour à tous. Alors mon problème, c'est de coller une image sur un
tore. Je sais, ca ne doit pas être très difficile, mais cela fait
plusieurs jours que je suis dessus et que je sèche.

Je sais faire facilement apparaitre un tore avec les primitives associées, par contre, impossible de mettre une texture.

J'ai trouvé un premier exemple sur internet, mais la texture était
coller de chaque côté du tore, or moi je ne la veut qu'une fois:

pour être plus explicite, je voudrais prendre l'image de base, la
rouler ( en cylindre donc), puis joindre les entrées du cylindre pour
en faire un tore. Je me doute qu'une telle manipulation de l'image ne
doit pas être faisable, par contre mapper de cette manière sur un tore
est réalisable car j'en ai déjà vu des exemples.

Est ce que quelqu'un aurait un soupçon d'idées comment faire?

Merci d'avance.

1 réponse

saprobionte Messages postés 8 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 5 avril 2006
8 mars 2006 à 17:57
Bon alors j'ai continué mes tests, et voilà la dernière version obtenue:







#define iw 1024

#define ih 1024

#define tf "essai.bmp"





static GLubyte im[3*iw*ih];



void lectureTexture(char *fichier,int dx,int dy) {

FILE *f = fopen(fichier,"rb") ;

if ( f ) {

for ( int i = 0 ; i < dx ; i++ )

for ( int j = 0 ; j < dy ; j++ )

fread(&im[(j*dy+i)*3],1,3,f) ;

fclose(f) ; }

}



void InitGL()

{

glClearColor(.5,.5,.5,0);

lectureTexture(tf,iw,ih) ;

glEnable(GL_DEPTH_TEST);

glEnable(GL_TEXTURE_2D);

glGenTextures(1,&Nom);

glBindTexture(GL_TEXTURE_2D,Nom);

glTexImage2D (

GL_TEXTURE_2D,0,4,iw,ih,0,GL_RGBA,GL_UNSIGNED_BYTE,im);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

}



void drawScene3(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode( GL_MODELVIEW );

glLoadIdentity();

glColor3f( 0.2, 0.2, 1.0 );

glTranslatef( -0.5, 0.0, -35.0);

glDisable( GL_CULL_FACE );

glutSolidTorus(0.5,2.0,40,40);

glFlush();

glutSwapBuffers();

}



void resizeWindow3(int w, int h)

{

double aspectRatio;

glViewport( 0, 0, w, h );

w = (w==0) ? 1 : w;

h = (h==0) ? 1 : h;

aspectRatio = (double)w / (double)h;

glMatrixMode( GL_PROJECTION );

glLoadIdentity();

gluPerspective( 15.0, aspectRatio, 25.0, 45.0 );



}







int main(int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH );

glutInitWindowSize(500, 500);

glutInitWindowPosition(600, 600);

glutCreateWindow("Trois D");

InitGL();

glutDisplayFunc(drawScene3);

glutReshapeFunc(resizeWindow3);

glutMainLoop();

return 0;

}





Si quelqu'un peut me dire pourquoi ca marche pas...
0
Rejoignez-nous