Bonjour,
Ayant décider de nous lancer dans un projet de jeu libre avec un ami, nous avons commencé à coder notre moteur 3D. Ce que nous souhaiterions c'est faire un rendu en cel shading. Dans cette optique nous avons commencer à afficher les contours des différentes formes crée pour le jeu. Il y a cependant un petit soucis lorsque je regarde les faces de ma figure (dans le code ce sera un prisme) car les faces (numéroté 1 et 2 dans le code sources) ont des soucis d'affichage quand je les regarde(on voit une espèce de surface noir par moment). Ce problème apparait seulement lorsque la figure complète est affiché.
J'aimerais donc savoir si quelqu'un connait ce soucis?
Si il y a un moyen d'y remédiez?
Si il faut (par exemple) d'abord définir les normales des différentes faces de la figure? et comment le faire?

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
void eldecors::prismepente()
{
 
    //affichage des faces de la figures!
 
    glBegin(GL_TRIANGLES);
 
    glVertex3f(m_x, m_y+m_hauteur, m_z+m_largeur);
    glVertex3f(m_x, m_y, m_z+m_largeur);
    glVertex3f(m_x, m_y, m_z);
 
    glVertex3f(m_x+m_longueur, m_y+m_hauteur, m_z+m_largeur);
    glVertex3f(m_x+m_longueur, m_y, m_z);
    glVertex3f(m_x+m_longueur, m_y, m_z+m_largeur);
 
    glEnd();
 
 
    glBegin(GL_QUADS);
 
    glVertex3f(m_x, m_y, m_z);
    glVertex3f(m_x+m_longueur, m_y, m_z);
    glVertex3f(m_x+m_longueur, m_y+m_hauteur, m_z+m_largeur);
    glVertex3f(m_x, m_y+m_hauteur, m_z+m_largeur);
 
 
    glVertex3f(m_x, m_y, m_z);
    glVertex3f(m_x, m_y, m_z+m_largeur);
    glVertex3f(m_x+m_longueur, m_y, m_z+m_largeur);
    glVertex3f(m_x+m_longueur, m_y, m_z);
 
 
    glVertex3f(m_x, m_y+m_hauteur, m_z+m_largeur);
    glVertex3f(m_x+m_longueur, m_y+m_hauteur, m_z+m_largeur);
    glVertex3f(m_x+m_longueur, m_y, m_z+m_largeur);
    glVertex3f(m_x, m_y, m_z+m_largeur);
 
 
    glEnd();
 
 
    //affichage des contours de la figure! 
 
    glEnable (GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
 
	glPolygonMode (GL_BACK, GL_LINE);
	glLineWidth (4.0f);
 
	glCullFace (GL_FRONT);
 
	glDepthFunc (GL_LEQUAL);
 
	glColor3f (0.0f,0.0f,0.0f);
 
 
    glBegin(GL_TRIANGLES);
 
    glVertex3f(m_x, m_y+m_hauteur, m_z+m_largeur);
    glVertex3f(m_x, m_y, m_z+m_largeur);
    glVertex3f(m_x, m_y, m_z);
 
    glVertex3f(m_x+m_longueur, m_y+m_hauteur, m_z+m_largeur);
    glVertex3f(m_x+m_longueur, m_y, m_z);
    glVertex3f(m_x+m_longueur, m_y, m_z+m_largeur);
 
    glEnd();
 
 
    glBegin(GL_QUADS);
 
    glVertex3f(m_x, m_y, m_z);
    glVertex3f(m_x+m_longueur, m_y, m_z);
    glVertex3f(m_x+m_longueur, m_y+m_hauteur, m_z+m_largeur);
    glVertex3f(m_x, m_y+m_hauteur, m_z+m_largeur);
 
//FACE 1 qui a un soucis
 
    glVertex3f(m_x, m_y, m_z);
    glVertex3f(m_x, m_y, m_z+m_largeur);
    glVertex3f(m_x+m_longueur, m_y, m_z+m_largeur);
    glVertex3f(m_x+m_longueur, m_y, m_z);
 
// FACE 2 qui a un soucis
 
    glVertex3f(m_x, m_y+m_hauteur, m_z+m_largeur);
    glVertex3f(m_x+m_longueur, m_y+m_hauteur, m_z+m_largeur);
    glVertex3f(m_x+m_longueur, m_y, m_z+m_largeur);
    glVertex3f(m_x, m_y, m_z+m_largeur);
 
 
    glEnd();
 
 
    glDepthFunc (GL_LESS);								
 
	glCullFace (GL_BACK);									
 
	glPolygonMode (GL_BACK, GL_FILL);					
 
	glDisable (GL_BLEND);
}
Cette fonction est appelée dans une autre fonction qui lui choisi aussi sa couleur (dans mon test, le fond de la scène était rouge ma figure blanche et les contours noir).
Merci de l'attention porté à ma requête.

PS : je tiens à précisez que l'on a déjà fait de l'opengl pendant un mois a la fac et qu'on se lance dans un projet comme cela en connaissance de cause ;-)