Laden...

Vertex-Normale berechnen

Erstellt von Rapthor vor 19 Jahren Letzter Beitrag vor 19 Jahren 7.257 Views
R
Rapthor Themenstarter:in
151 Beiträge seit 2005
vor 19 Jahren
Vertex-Normale berechnen

Hallo,

wie kann man eigentlich ganz leicht die Vertex-Normale eines Vertex (ein 3D Punkt mit x,y,z - Koordinaten) errechnen?
Diese Normalen brauche ich für den Einsatz von Licht in meiner Direct3D-Anwendung.

Danke,
Rapthor

R
Rapthor Themenstarter:in
151 Beiträge seit 2005
vor 19 Jahren

.. ich merke grad, dass ein Punkt allein da nicht grad weiterhilft. Aber was wenn ich immer 3 Punkte habe, die ein Dreieck ergeben?
Es gibt dann genau 2 Normalen (lotrecht stehende Vektoren auf der Fläche): einer nach oben und einer nach unten.

Wie krieg ich die Normale berechnet?

140 Beiträge seit 2004
vor 19 Jahren

Hallo

Da ich gerade erst begonnen habe, mit DirectX zu arbeiten, kann ich dir nicht mit Code weiterhelfen, aber rein Mathematisch gesehen würde ich das Dreieck als Ebene mit der Formel aX+bY+c*Z = d ansehen, wobei durch a,b und c die Neigung und durch d die Position der Ebene bestimmt ist. Der Normalenvektor dieser Ebene ist dann (a,b,c)t.

mfg Hitman

Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!

140 Beiträge seit 2004
vor 19 Jahren

War vielleicht etwas kompliziert erklärt, wenn man sich noch nie damit auseinandergesetzt hat:

Der Normalvektor ist das Kreuzprodukt der beiden Vektoren, welche das Dreieck aufspannen. Also Vektor1 = VertexPos2 - VertexPos1 und Vektor2 = VertexPos3 - VertexPos1. Damit ist N dann Vektor1 x Vektor2 -->

Nx = Vektor1yVektor2z - Vektor1zVektor2y
Ny = Vektor1zVektor2x - Vektor1xVektor2z
Nz = Vektor1xVektor2y - Vektor1yVektor2x

Hoffe, dass ich dir damit helfen konnte...

mfg Hitman

Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!

140 Beiträge seit 2004
vor 19 Jahren

Versuchs sonst mal hier (Theorie):

http://www.mathe-online.at/materialien/Andreas.Pester/files/Vectors/kreuzprodukt.htm

So, jetzt melde ich mich aber endgültig ab 🙂

Es gibt Probleme, die kann man nicht lösen. Für alle anderen gibt es Visual C# .NET!

M
456 Beiträge seit 2004
vor 19 Jahren

Das Berechnen der Vertexnormalen läuft meist in drei Schritten ab:

  1. Berechne die Oberflächennormale eines Dreiecks (nicht mit Vertexnormale verwechseln) und speichere sie in einer Liste. (Simples Kreuzprodukt)
  2. Durchlaufe alle Vertices und addiere alle Dreiecksnormalen der anliegenden Dreicke, die sich den aktuellen Vertex teilen.
  3. Alle Vertexnormalen normieren.

Den 2. und 3. Punkt brauchst du nur wenn es Gouraud Shading sein soll. Bei Flatshading reicht Punkt 1.

I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.