| |||||
| Dernière réponse | |
|---|---|
| Sujet : [OpenGL] Normales | |
| darkoli | voici un exemple en c qui marche :
pour faire une surface toute lissée (genre une sphere), il faut faire la moyenne des normales. normalement il y a une normale par face mais la on en calcul une pour chaque point. c'est la somme des normales des faces ou se trouve le point (en gros). // ----------------------------------------------------------------------------- void Calcul_Normale(double* a,double* b,double* c,double* n) { // paramètre : trois points a,b et c (tableau de 3 valeurs) // les point sont donnés dans l'ordre anti-horaire, si c'est // pas le bon sens, ben il faut inverser les points double v[3],w[3]; double lng=0; v[0]=c[0]-a[0]; v[1]=c[1]-a[1]; v[2]=c[2]-a[2]; w[0]=b[0]-a[0]; w[1]=b[1]-a[1]; w[2]=b[2]-a[2]; n[0]=v[1]*w[2] - w[1]*v[2]; n[1]=v[2]*w[0] - w[2]*v[0]; n[2]=v[0]*w[1] - w[0]*v[1]; lng=sqrt((n[0]*n[0])+(n[1]*n[1])+(n[2]*n[2])); if (lng>0) { lng=1/lng; n[0]=n[0]*lng; n[1]=n[1]*lng; n[2]=n[2]*lng; }} //------------------------------------------------------------------------------ |
| Vue Rapide de la discussion |
|---|