Bonjour!
Voici mon probleme : J'affiche une maison 3D tout mes objets dans la maison sont au format 3DS max (.3ds), dans une des pièces j'ai un mirroir ou je veux biensur afficher mes objets de la piece. Mes objets de la pieces sont affichés comme cela :
Voici le code de mon mirroir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void drawChambre() { glPushMatrix(); glRotatef(-90,0,1,0); glRotatef(-90,1,0,0); glTranslatef(55,-73,-61); glScalef(32.0,32.0,32.0); chambre->Draw(); glPopMatrix(); }
Le probleme exact est lors de l'inversion des transformations pr l'effet mirroir tout se passe bien pour les rotations et la translation mais sur le scale je dois mal m'y prendre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 void mirroir_chambre() { glDisable(GL_LIGHT0); glDisable(GL_LIGHTING); glPushMatrix(); glCullFace(GL_BACK); glEnable(GL_CULL_FACE); glRotatef(-90,0,1,0); glRotatef(-90,1,0,0); glTranslatef(55,-73,-61); glScalef(32.0,32.0,32.0); miroir_chambre->Draw(); glDisable(GL_CULL_FACE); glPopMatrix(); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); }
Voici le code de l'effet mirroir:
J'ai essayé un peu tout avec le scalef mais bon rien ne marche. Je précise que chambre->Draw() dessine donc des objets diverses dont une sorte d'armoire sans les mirroirs sur les portes (dessinés eux par mirroir_chambre())
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 glEnable(GL_CLIP_PLANE0); GLdouble eqn[4]; eqn[0] = -1.0; eqn[1] = 0.0; eqn[2] = 0.0; eqn[3] = 0.0; glPushMatrix(); { glRotatef(spin_y, 1, 0, 0); glRotatef(spin_x, 0, 1, 0); glTranslatef(-t, 0, 0); //Centr� en -t, 0, 0*/ glRotatef(-90,0,1,0); glRotatef(-90,1,0,0); glTranslatef(55,-73,-61); glScalef(32.0,32.0,32.0); glClipPlane(GL_CLIP_PLANE0, eqn); //On place le plan de clipping //glScalef(-1, 1, 1); //on applique la sym�trie glScalef(-32.0,32.0,32.0); glTranslatef(-55,73,61); glRotatef(90,1,0,0); glRotatef(90,0,1,0); //Et on peut dessiner le reflet. drawChambre(); } glPopMatrix();
Partager