Bonjour à tous,

je suis nouveau sur ce forum et je découvre pas mal d'information, j'ai un petit probème à vous soumettre.

J'importe un objet au format WAVEFront OBJ, je calcule moi même les normales de chaque triangle, et à partir de ça j'essaie de récupérer les normales pour chaques vertices.

A l'affichage il semblerait que ça se passe mal.
[img=http://img369.imageshack.us/img369/2921/bugcalculnormal0hz.th.jpg]

Je vous soumets un peu de code :
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
 
void Objet3D::initPointNorm()
{
	// le triangle a traité
	for(int iT=0;iT<nbTri;++iT)
	{
		// les points du triangles à traiter
		for(int kP = 0; kP<3; ++kP)
		{		
			float cp = 0.;
 
			// initialisation avant de sommer (par précaution)
			tri_[iT].setNormPoint(kP, Vector3D(0.,0.,0.) );
 
			// on parcours les autres triangles
			for(int jT=0; jT<nbTri; ++jT)
			{				
				// les points du triangle comparé
				for(int lP=0; lP<3; ++lP)
				{
					// si le point est dans le triangle comparé
					if(tri_[jT].cherchPoint(tri_[iT].getPoint(kP),lP))
					{
						cp ++;
						// on somme la norme
						tri_[iT].setNormPoint(kP, tri_[iT].getNormPoint(kP) + tri_[jT].getNorm() );
					}
				}
 
			}
 
			if(cp > 0) // on a trouver des normales
			{
				// on divise la norme par le nombre de point (cp)
				//cp = 1 / cp;
				//tri_[iT].setNormPoint(kP, tri_[iT].getNormPoint(kP) * cp );
 
				tri_[iT].setNormPoint(kP, tri_[iT].getNormPoint(kP).Normalise());				
 
			}			
		}
	}
	smooth = true;
}
 
...
 
void Objet3D::drawSolid() const
{
 
	// Activation de la texture
	glBindTexture(GL_TEXTURE_2D, texID);
 
	for( int i = 0 ; i<nbTri; ++i)
	{
		if(smooth)
		{
			glBegin (GL_TRIANGLES);
 
			glNormal3f(tri_[i].getNormPoint(0).xyz(0),tri_[i].getNormPoint(0).xyz(1),tri_[i].getNormPoint(0).xyz(2));
			glVertex3f(tri_[i].getPoint(0).xyz(0),tri_[i].getPoint(0).xyz(1),tri_[i].getPoint(0).xyz(2));
 
			glNormal3f(tri_[i].getNormPoint(0).xyz(1),tri_[i].getNormPoint(1).xyz(1),tri_[i].getNormPoint(1).xyz(2));
			glVertex3f(tri_[i].getPoint(1).xyz(0),tri_[i].getPoint(1).xyz(1),tri_[i].getPoint(1).xyz(2));
 
			glNormal3f(tri_[i].getNormPoint(0).xyz(2),tri_[i].getNormPoint(2).xyz(1),tri_[i].getNormPoint(2).xyz(2));
			glVertex3f(tri_[i].getPoint(2).xyz(0),tri_[i].getPoint(2).xyz(1),tri_[i].getPoint(2).xyz(2));
		glEnd();
		}
		else
		{
          ....
 
}
En gros j'utilise la méthode expliquée quelque part sur flipcode.com, je somme les normales des triangles auquel appartient le sommet, puis soit je divise soit je normalise, ça revient au même.

Voilà j'aimerais savoir comment régler le problème, pour une certaine orientation de la caméra ça a l'aire de fonctionner.
Merci d'avance !