Normales

Résolu
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012 - 22 juil. 2005 à 15:56
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 - 23 juil. 2005 à 15:45
Je voudrais juste savoir, please, si quand vous faites vos propres
objets tri dimensionnels (pas par des logiciels genre 3dsmax), vous
calculez vous même vos normales aux sommets, de manière exactes ou
alors rapidement, ("ca doit etre dans cette directtion, donc je vais
l'y mettre en gros..."), paske mon pr c que j'essai de dessiner une
main, directement par moi même, mais g des pb avec la lumière (la main
est transparente rouge et certaines parties sont totalement invisibles)
!

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">

4 réponses

Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
23 juil. 2005 à 15:36
La normale en un sommet vaut généralement la moyenne des normales des
faces qui contiennent le point (pour un ombrage lisse des faces).

En gros:



for (DWORD i=0; i<nbPoints; i++)

{

normale[i] = vecteur nul;

for (DWORD j=0; j<nbFaces; j++)

{

if (point[i] appartient à face[j])

normale[i] += normaleface[j];

}

Normer(normale[i]);

}

Evidemment ce n'est pas optimisé... mais c'est pour montrer le principe.
3
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
23 juil. 2005 à 15:45
Le "probleme" est que dans la déclaration des sommets, on ne met qu'une
normale ( ~généralement, sommet = 1 position3D + 1 couleur + 1 couple
de coordonnées uv + 1 normale). Si par hasard un somment appartient à
plusieurs faces, on lui affecte une normale "moyenne".



Si on veut afficher un cube, il est clair qu'on ne veut pas que la
carte video lisse les ombres au niveau des aretes; on veut plutot que
chaque face du cube soit éclairée uniformément. Il faut pour cela
dupliquer les sommets de façon à ce que chaque face soit définie par 3
sommets dont les normales sont orientées comme celle de la face.



Pourquoi:

Au moment d'afficher les pixels, la carte video va calculer l'ombrage en fonction de la normale au pixel.

La normale au pixel étant une normale résultant de l'interpolation
linéaire des normales des sommets de la face. Si les normales des 3
sommets sont identiques, les normales aux pixels seront identiques et
donc l'ombrage uniforme.
3
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
22 juil. 2005 à 18:48
Les deux choix sont possibles avec encore un autre:

l'utilisation d'une librairie existante.



tout dépend de l'objectif et des contraintes (tps réel...)



++

___________________________________________________________
Magicalement
Nono
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
22 juil. 2005 à 19:38
euh... en fait temps réel... pas trop vu que c'est presque la seule
chose à afficher. En gros si tu veux derrière g juste un clavier dont
chaque touche est levée ou baissée suivant si celle sur le clavier
réelle l'est ou non. Le but final étant de simuler la frappe de la main
sur le clavier quand on frappe une touche, pour un prog de dactylo.
Donc, le temps réel, je crois que j'ai encore de la marge. Disons que
la question que je me pose surtout : par exemple, pour la main, la
jointure entre deux doigts et la main elle même (symbolisés par des
pavés). Ce sommet, je vois pas trop comment orienter sa normale.
Jusqu'à présent, je faisait un simple produit vectoriel entre certaines
arêtes. Mais la j'ai plusieurs choix dispos et je c pas lesquels sont
les mieux adaptés.

<hr size="2" width="100%"> Qui ne tente rien...

Ne risque pas d'avoir grand chose !!!

<hr siz="">
0
Rejoignez-nous