Bonjour,

Voilà, j'ai un petit problème (comme vous vous en doutez) pour faire simple, disons que je voudrais faire un cube (lui-même composé de cubes, 3*3*3, la variable cube par après vaudra 3 pour l'exemple) et que lorsque je cliquerais sur l'un d'eux, celui-ci changerait de couleur.

Cela, pour m'amener à faire par la suite, un démineur en 3d... ! Ca fait une bonne semaine que je planche sur le picking et cela crée quelques problèmes dès que je réalise une rotation.

Voici mon code, vous comprendrez certainement plus facilement.

Ici, le principal :
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
            case SDL_MOUSEBUTTONDOWN: /* Clic de la souris */
                if (event.button.button == SDL_BUTTON_LEFT)
                {
                    x = event.button.x;
                    y = event.button.y;
                }
 
                GLint hits;
                GLint viewport[4];
                GLuint buffer[50];
 
                glGetIntegerv(GL_VIEWPORT, viewport);
 
                glSelectBuffer(50,buffer);
 
                (void) glRenderMode(GL_SELECT);
 
                glInitNames();
                glPushName(0);
 
                glMatrixMode(GL_PROJECTION);
                glPushMatrix();
 
                glLoadIdentity ();
 
                gluPickMatrix((GLdouble) x, (GLdouble) (viewport[3]-y), 1.0f, 1.0f, viewport);
                gluPerspective(70,(double)640/480,1,1000);
 
                glMatrixMode(GL_MODELVIEW);
 
                compteurCube = 0;
                for (i=0; i<cube; i++)
                {
                    for (j=0; j<cube; j++)
                    {
                        for (k=0; k<cube; k++)
                        {
                            glLoadName(compteurCube);
                            glBegin(GL_QUADS);
                                glVertex3d(i+1,j+1,k+1);
                                glVertex3d(i+1,j+1,k);
                                glVertex3d(i,j+1,k);
                                glVertex3d(i,j+1,k+1);
 
                                glVertex3d(i+1,j,k+1);
                                glVertex3d(i+1,j,k);
                                glVertex3d(i+1,j+1,k);
                                glVertex3d(i+1,j+1,k+1);
 
                                glVertex3d(i,j,k+1);
                                glVertex3d(i,j,k);
                                glVertex3d(i+1,j,k);
                                glVertex3d(i+1,j,k+1);
 
                                glVertex3d(i,j+1,k+1);
                                glVertex3d(i,j+1,k);
                                glVertex3d(i,j,k);
                                glVertex3d(i,j,k+1);
 
                                glVertex3d(i+1,j+1,k);
                                glVertex3d(i+1,j,k);
                                glVertex3d(i,j,k);
                                glVertex3d(i,j+1,k);
 
                                glVertex3d(i+1,j,k+1);
                                glVertex3d(i+1,j+1,k+1);
                                glVertex3d(i,j+1,k+1);
                                glVertex3d(i,j,k+1);
                            glEnd();
                            compteurCube++;
                        }
                    }
                }
 
                glMatrixMode (GL_PROJECTION);
                glPopMatrix ();
                glFlush ();
 
                hits = glRenderMode(GL_RENDER);
                proits (hits, buffer);
Le dessin est exactement le même, sauf qu'il met en rouge le cube sélectionné précédemment et a ceci en plus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
    // On fait une rotation du cube pour le faire tourner
    glRotated(angleX, 1.0, 0.0, 0.0); 
    glRotated(angleY, 0.0, 1.0, 0.0); 
    glRotated(angleZ, 0.0, 0.0, 1.0);
 
    // On cadre le cube en 0,0,0
    glTranslated(-cube/2,-cube/2,-cube/2);
Dois-je le mettre également dans la première partie du code ? Pcq cela me génère encore plus d'erreur lors de déplacement...

Y a-t-il des erreurs vraiment flagrantes ??

Si vous voulez le code complet, demandez le moi je l'uperais...!
Merci d'avance...