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.
EOF