a = cv_Vertices[s_Indices[run]].x;
b = cv_Vertices[s_Indices[run + 1]].y;
c = cv_Vertices[s_Indices[run + 2]].z;
A = a - b;
B = c - b;
cv_Vertices[s_Indices[run]].NORMAL.x = (A.y * B.z) - (A.z * B.y);
cv_Vertices[s_Indices[run + 1]].NORMAL.y = (A.z * B.x) - (A.x * B.z);
cv_Vertices[s_Indices[run + 2]].NORMAL.z = (A.x * B.y) - (A.y * B.x);
run += 3;
das ist FALSCH!
du solltest vielleicht wirklich einmal eine pyramide oder der gleichen beleuchten, denn du scheinst das system mit den normalen noch nicht ganz verstanden zu haben.. dir ist bewusst. dass du jedem vertex einen normalenvektor gibst? sieht in den letzten zeilen nicht danach aus. dein code könnte folgendermaßen annähernd klappen:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
vector a = Vertices[Indices[run]].POSITION
vector b = Vertices[Indices[run+1]].POSITION
vector c = Vertices[Indices[run+2]].POSITION
vector A = a-b
vector B = c-b
vector N = normalize(AxB)
Vertices[Indices[run]].NORMAL = Vertices[Indices[run+1]].NORMAL = Vertices[Indices[run+2]].NORMAL = N
|
ist allerdings eine seehr ungenaue Normalenberechnung
Es gibt so viele gut texte über terrains und auch deren normalen..google doch einfach mal.
Gruß Vincent