2016-06-20 18 views
0

Ich arbeite gerade an einem OpenGL-Projekt. Ich benutze die Vertex-Normalen für meine Beleuchtungsberechnungen, wodurch sie automatisch geglättet werden (ich denke, das wird Gara-Something-Shading genannt). Dies beginnt mit einem Low-Poly-Design mit hartkodierten Modellen zu arbeiten - aber sie sehen wegen der automatischen Glättung komisch aus.Blocking Edge Split Algorithm

Blender hat eine Mesh-Edge-Split-Option, die genau das tut, wonach ich suche. Es stellt sich Modelle

from this

to this

Statt meinen neu zu schreiben System macht für beide ermöglichen pro-Vertex normale glatte Beleuchtung und pro-Gesicht normale Festbeleuchtung, ich frage mich, ob jemand weiß, wie Blenders Edge-Split-Algorithmus funktioniert so, dass ich ihn in meinen hartcodierten Modellen neu erstellen kann.

Verwenden von Blender Ich habe normal exportierte OBJs mit ihren Edge-Splitting-Gegenstücken verglichen und es gibt keine Möglichkeit für mich, den Unterschied vollständig zu verstehen.

Vielen Dank.

+0

finden Ich denke, das sollte gefragt werden @ [blender.stackexchange.com] (http://blender.stackexchange.com/) –

Antwort

0

Das wäre Gouraud shading. Hier wird keine Geometrie verarbeitet. Es ist einfach ein anderes Schattierungsmodell.

In OpenGL müssen Sie für jedes Dreieck alle drei Scheitelpunkte mit der gleichen Normalen zeichnen, diese Normale ist das Kreuzprodukt der beiden Dreieckskanten. Sie sehen dann ein Netz mit der gleichen flachen Schattierung wie Ihr Bild.

Wenn jeder Vertex eine eigene Normale hat und diese Normalen im Dreieck nicht alle gleich sind, interpoliert OpenGL die Differenz über die Fläche der Fläche und erzeugt einen viel glatteren Übergang der Schattierung von Vertex zu Vertex. Dies ist glatt (Gouraud-Schattierung).

Zusammenfassend können Sie dies erreichen, indem Sie ändern, wie Sie die Normalen in Relation zu den Dreiecken zeichnen.

0

Ich habe nicht genug Punkte für einen Kommentar haben, geht so hier eine Antwort ..

Im Allgemeinen ich mit lfgtm einig: wenn jede Ecke hat 1 normal, aber der Scheitel geteilt wird (wieder verwendet, das heißt Indexed) durch mehrere Dreiecke, dann können Sie kein "flaches" Aussehen erzielen oder geteilte Kanten haben, weil Sie die zusätzlichen Normalen vermissen. Sie müssten den Scheitelpunkt duplizieren.

Aber da Sie OBJ Export erwähnen, haben Sie versucht, die „Smooth Gruppen“ Option in den OBJ-Exportoptionen tickt:

enter image description here

Dies erzeugt Gruppen entsprechend die Kantenglättung Sie scharf markiert hat (Im Bearbeitungsmodus: Mesh -> Kanten -> Mark scharf. Wenn Ihr Modul diese Glättungsgruppen in der OBJ-Datei unterstützt, behalten Sie diesen scharfen Kanteneffekt bei. Sie können diese scharfen Kanten in Blender mit dem Edge-Split-Modifikator (kreuzen Sie das „scharfe Kanten“ Option) Vorschau:

enter image description here

0

Blenders Rand Split Modifikator erreicht er Ergebnis ist durch das Netz zu brechen, wenn Sie den Rand Split gelten Modifier erhalten Sie ein Mesh mit Flächen, die nicht verbunden sind.

Was Sie in aussehen soll ist der Unterschied zwischen glatten und flachen Schattierung

shading sample

Wenn Sie „opengl Schattierung“ google finden Sie verschiedene Produkte wie this one was darauf hindeutet, die Verwendung von glShadeModel(GL_FLAT);