Hallo miteinander.
ich wollte mir eine Funktion schreiben um den Normalvektor berechnen zu können. Dieser wird ja aus den Kreuzprodukt gebildet, wovon a = Punkt B - Punkt A und b = Punkt C - Punkt A ist. Nun sehe ich auf manchen Seiten, dass der Normalvektor so berechnet wird:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
index1 = (j * m_terrainHeight) + i;
index2 = (j * m_terrainHeight) + (i+1);
index3 = ((j+1) * m_terrainHeight) + i;
// Get three vertices from the face.
vertex1[0] = m_heightMap[index1].x;
vertex1[1] = m_heightMap[index1].y;
vertex1[2] = m_heightMap[index1].z;
vertex2[0] = m_heightMap[index2].x;
vertex2[1] = m_heightMap[index2].y;
vertex2[2] = m_heightMap[index2].z;
vertex3[0] = m_heightMap[index3].x;
vertex3[1] = m_heightMap[index3].y;
vertex3[2] = m_heightMap[index3].z;
// Calculate the two vectors for this face.
vector1[0] = vertex1[0] - vertex3[0];
vector1[1] = vertex1[1] - vertex3[1];
vector1[2] = vertex1[2] - vertex3[2];
vector2[0] = vertex3[0] - vertex2[0];
vector2[1] = vertex3[1] - vertex2[1];
vector2[2] = vertex3[2] - vertex2[2];
|
Quelle
Dies würde ja folgendes entsprechen, wenn ich mich nicht täusche:
a = Punkt A - Punkt C
b = Punkt C - Punkt B
Daraus würde ja resultieren, dass der Normalvektor in einer anderen Richtungen zeigen würde. Beispiel:
A (5 | 1 | 0); B (1 | -3 | 0); C (-2 | -1 | 0)
a = B - A = (-4 | -4 | 0)
b = C - A = (-7 | -2 | 0)
a x b = (0 | 0 | -20)
_____________________________________________________
Selbe Punkte
a = A - C = (7 | 2 | 0)
b = C - B = (3 | 2 | 0)
a x b = (0 | 0 | 20)
______________________________________________________
=> Der Richtungsvektor zeigt in einer anderen Richtung.
Meine Frage wäre daher, was ist denn nun richtig für die Berechnung des Normalvektors oder ist es egal?