Easy Apps 4 You

Get Adobe Flash player

Normalen Berechnung


Dies ist ein kleines Tutorial zum Thema Normalen-Berechnung.

Zunächst werden 4 Dreiecke definiert. Jedes Dreieck besteht aus drei Vektoren, die wiederum aus drei Werten bestehen.

Javascript vom Vertex Array.

Die Dreiecke wurden als Linien gerendert.
Es entsteht daher eine Pyramide.


Werden die Dreiecke als Triangles gerendert, dann sieht man erstmal nur 4 schwarze Flächen.


Um die Dreiecke im "Richtigen Licht" zu sehen, muss zu jedem Vektor eine Normale berechnet werden. Wenn man Modelle mit einem entsprechenden Programm (z. B. Blender oder Softimage) erstellt, erhält man eine Liste aus Vektoren und die entsprechenden Normalen. Wenn man kleine Modelle selbst erstellt (wie die Pyramide oben), dann müssen die Normalen berechnet werden.

Dazu wird jedes Dreieck betrachtet und ein Vektor berechnet, der senkrecht auf der Dreieck-Fläche steht. Diese Normale wird dann jedem Verktor des Dreiecks zugeordnet.

Javascript calcNormals.

Man geht alle Vektoren durch, wobei immer drei davon ein Dreieck definieren. Danach wird die Normale berechnet und in eine Liste eingefügt.

Nun hat man eine Liste der Vektoren und eine Liste der Normalen. Die werden dann dam Opengl-Renderer übergeben.
Beim betrachten der Grphic stellt man fest, dass alle Normale für ein Dreieck in dieselbe Richtung gehen. Dadurch erscheinen die Kanten "scharf".


Ein Modell. besteht aus vielen Dreiecken, je nach deren Anzahl würde das Modell "eckig" aussehen. Man könnte die Anzahl der Dreiecke erhöhen, was auf Kosten des Speichers geht und bei vielen Modellen auch auf die Renderzeit.

Das Aussehen eines Modells kann verbessert werden, wenn man die Normalen an Dreiecks-Kanten neu berechnet. Dabei wird eine resultierende Normale an gleichen Vektoren berechnet.

Javascript calcSmoothNormals.

Dabei wird Vektor 1 mit allen anderen verglichen dann Vektor 2 usw. Bei gleichen Vektoren merkt man sich die Normalen. In dem obigen Beispiel sind z. B. an dem oberen Punkt 4 Normale beteiligt. Aus diesen 4 Normalen berechnet man die resultierende Normale. D. h. die oberen 4 (gleichen) Koordinaten erhalten dieselbe Normale.

Der obere Punkt ist nun "geglättet".