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
{
....
} |
Partager