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:
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)
|
|