[ retard378 @ 19.02.2009. 23:03 ] @
zanima me kako da iskoristim polja cvorova za definisanje vektora normala
problem je u tome sto jedan vertex moze imati vise vektora normala u zavisnosti na kom se mesh-u nalazi a ako koristim DrawElements on ce da radi jedan cvor jedna normala,jer za svaku koordinatu vezuje tacno jednu normalu....
unapred hvala
[ glorius @ 02.03.2009. 12:37 ] @
Citat:
vertex moze imati vise vektora normala u zavisnosti na kom se mesh-u nalazi


Verovatno si mislio 'u zavisnosti kojem poligonu pripada'...

Svaki vertex bi trebao da ima samo jednu normalu. Ako je vertex zajednicki za npr. N poligona, ti ces sabrati svih N normala ( svaki poligon ima jednu normalu ) i podeliti sa N svaku komponentu (x, y, z) dobijene sume i ako je potrebno normalizovati dobijenu normalu. To ti je konacna normala vertexa koji je zajednicki za vise poligona. Na ovaj nacin se dobija iluzija smooth povrsine.


Code:


for( i = 0; i < numVertices; i++ )
{
      vector3D normalSum;
      int numFaces; // broj poligona kojima je ovaj vertex zajednicki

      for(int j = 0; j < numFaces;j ++)
      {
             if( Faces[0] == i || Faces[1] == i || Faces[2] == i )  // Face je struktura sa indexima vertexa koji cine face
             {
                     Vector3D n = GetFaceNormal( j ) ; // koriscenjem vektorskog proizvoda dobices normalu ovog poligona ( postoje primeri na netu )
                     normalSum += n;
                     numFaces++;
              }
      }

      Vector3D finalNormal = normalSum/(float)numFaces;
      finalNormal = normalize(finalNormal);

      // sacuvaj normalu u neki niz
}



Postoji detaljniji kod na netu, ovde sam zeleo samo da ti dam ideju kako mozes da odradis.