Bonjour, j'ai un problème de visualisation comme vous pouvez le voir sur le démo vidéo suivant: http://magwa.ca/vincent/tetra.avi

Je dessine en fait des tétraèdres (polygone à 4 faces triangulaires) et je veux dessiner également leur bordure.

Donc je fais:


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
 
             /* Dessiner les tétraèdres pleins */
                glColor3d(m_RGBRender[0],m_RGBRender[1],m_RGBRender[2]);          
                glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
                glBegin(GL_TRIANGLES);
                for (pos = tetras.begin() ; pos + 4 < tetras.end() ; pos+=4) {
                     // Dessine les 4 faces du tétraèdre
                     glVertex3d((*pos)->get_x(),(*pos)->get_y(),(*pos)->get_z());
                     glVertex3d((*(pos+3))->get_x(),(*(pos+3))->get_y(),(*(pos+3))->get_z());
                     glVertex3d((*(pos+2))->get_x(),(*(pos+2))->get_y(),(*(pos+2))->get_z());
 
                     glVertex3d((*pos)->get_x(),(*pos)->get_y(),(*pos)->get_z());
                     glVertex3d((*(pos+1))->get_x(),(*(pos+1))->get_y(),(*(pos+1))->get_z());
                     glVertex3d((*(pos+2))->get_x(),(*(pos+2))->get_y(),(*(pos+2))->get_z());
 
                     glVertex3d((*pos)->get_x(),(*pos)->get_y(),(*pos)->get_z());
                     glVertex3d((*(pos+1))->get_x(),(*(pos+1))->get_y(),(*(pos+1))->get_z());
                     glVertex3d((*(pos+3))->get_x(),(*(pos+3))->get_y(),(*(pos+3))->get_z());
 
                     glVertex3d((*(pos+1))->get_x(),(*(pos+1))->get_y(),(*(pos+1))->get_z());
                     glVertex3d((*(pos+2))->get_x(),(*(pos+2))->get_y(),(*(pos+2))->get_z());
                     glVertex3d((*(pos+3))->get_x(),(*(pos+3))->get_y(),(*(pos+3))->get_z());
 
                }     
                glEnd();
 
 
                 /* Dessine les bordures des tétraèdres */
                glColor3d(m_RGBBordersW[0],m_RGBBordersW[1],m_RGBBordersW[2]);          
                glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
                glBegin(GL_TRIANGLES);
                for (pos = tetras.begin() ; pos + 4 < tetras.end() ; pos+=4) {
                     glVertex3d((*pos)->get_x(),(*pos)->get_y(),(*pos)->get_z());
                     glVertex3d((*(pos+3))->get_x(),(*(pos+3))->get_y(),(*(pos+3))->get_z());
                     glVertex3d((*(pos+2))->get_x(),(*(pos+2))->get_y(),(*(pos+2))->get_z());
 
                     glVertex3d((*pos)->get_x(),(*pos)->get_y(),(*pos)->get_z());
                     glVertex3d((*(pos+1))->get_x(),(*(pos+1))->get_y(),(*(pos+1))->get_z());
                     glVertex3d((*(pos+2))->get_x(),(*(pos+2))->get_y(),(*(pos+2))->get_z());
 
                     glVertex3d((*pos)->get_x(),(*pos)->get_y(),(*pos)->get_z());
                     glVertex3d((*(pos+1))->get_x(),(*(pos+1))->get_y(),(*(pos+1))->get_z());
                     glVertex3d((*(pos+3))->get_x(),(*(pos+3))->get_y(),(*(pos+3))->get_z());
 
                     glVertex3d((*(pos+1))->get_x(),(*(pos+1))->get_y(),(*(pos+1))->get_z());
                     glVertex3d((*(pos+2))->get_x(),(*(pos+2))->get_y(),(*(pos+2))->get_z());
                     glVertex3d((*(pos+3))->get_x(),(*(pos+3))->get_y(),(*(pos+3))->get_z());
 
                }     
                glEnd();


Mon initialisation:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
void GL_MAILLAGE::InitGL() 
{  
    ReinitGL();    
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
 
    m_init = true;  
}
Et mon Reinit (lors que je resize l'écran)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
void GL_MAILLAGE::ReinitGL(double dx, double dy) 
{
    glViewport(0, 0, m_glCanvasSize.GetWidth(), m_glCanvasSize.GetHeight()); 
    glEnable (GL_DEPTH_TEST);
 
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();