Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » DirectX » Normale berechnen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
23.07.2005, 15:42 Uhr
~Mathman
Gast


Also es gibt immer nur ein Kreuzprodukt aus 2 3dimensionalen Vektoren.
Das Kreuzprodukt aus den Vektoren a und b ist folgendermaßen definiert:
/ a3*b2-a2*b3 \
crossP(a, b) = | a1*b3-a3*b1 |
\ a2*b1-a1*b2 /

Das Kreuzprodukt ist ein zu beiden Vektoren senkrechter Vektor, dessen Länge dem Produkt der längen der Eingangsvektoren mal dem sinus ihres Winkels zueinander entspricht.

Wenn du also zwei seiten eines Dreiecks auf einer Ebene in Form von Vektoren hast, ist das Vektroprodukt oder Kreuzprodukt die normale dieser Ebene.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
23.07.2005, 15:43 Uhr
~Mathman
Gast


in dem vorherigen Beitrag gehören mehrere Leerstellen vor die 3. und 5. Zeile. Die Slashes sollen über den Pipes stehen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
30.07.2005, 13:27 Uhr
DarthDevilous



Im folgenden Ansatz ist Punkt P der Punkt, von dem du die Normale suchst. Die Punkte Q, R, S und T sind die vier umliegenden Punkte. Also etwa so:

Code:
  Q
T P R
  S


Um die normale von P zu finden, musst du:
1. die vektoren von P zu jedem der vier anderen Punkte bilden.
2. Für jedes paar benachbarter Vektoren bildest du von diesen das Kruzprodukt. Achtung: Im Gegenuhrzeigersinn gehen!
das Kreuzprodukt von oben, aber richtig formattiert:

Code:
          / ay*bz - az*by \
(a x b) = | az*bx - ax*bz |
          \ ax*by - ay*bx /


3. Die vier Kreuzprodukte addieren, und den resultierenden Vektor normalisieren (auf Länge 1 reduzieren)

hier ein bisschen Pseudo-code:

C++:
// Schritt 1: Vektoren bilden
Vector q = Vector(P, Q)
Vector r = Vector(P, R)
Vector s = Vector(P, S)
Vector t = Vector(P, T)
// Schritt 2: Kreuzprodukte bilden
Vector qxt = Cross(q, t)
Vector txs = Cross(t, s)
Vector sxr = Cross(s, r)
Vector rxq = Cross(r, q)
// Schritt 3: Kreuzprodukte summieren und normalisieren
Vector np = Normalise(qxt + txs + sxr + rxq)

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
02.10.2006, 16:20 Uhr
SKARF



Tach auch!

Hab nach Ewigkeiten mal wieder reingeschaut.
Die letzten Kommentare waren sehr hilfreich!
Habs ausprobiert und irgendwann hats sogar funktioniert.

Vielen dank nochmal...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ DirectX ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: