2016-03-22 15 views
0

Mit dem Element-Puffer senden Sie Indizes, die angeben, welche verts für ein bestimmtes Gesicht verwendet werden sollen. Aber was ist mit Normalen? Wenn ich einen Würfel mit einem einfachen diffusen Shader rendern möchte, würde ich eine geglättete Normale erhalten (wenn ich sie vorher glätte). Wenn ich versuche, Kanten mit harten Oberflächen wie einen Würfel zu rendern, kann ich keine harten Kanten zeichnen, da einige Flächen denselben Scheitelpunkt haben.Wie kann man mit glDrawElements() Cubes mit harten Oberflächen zeichnen?

Gibt es eine Möglichkeit, den Elementpuffer weiterhin für Objekte mit harten Oberflächen zu verwenden?

Ich mag die Verschwendung von Speicher nicht, wenn Sie glDrawArrays() verwenden.

Antwort

1

Im Allgemeinen sollte ein "Vertex" (in OpenGL-Begriffen) alle notwendigen Informationen enthalten, damit es gerendert werden kann. Dies schließt Position ein, kann aber (und in Ihrem Fall wahrscheinlich) auch Dinge wie Texturkoordinaten, Normalen usw. einschließen. Wenn Sie also mit zwei Scheitelpunkten arbeiten, die die gleiche Position haben, aber unterschiedliche Texturkoordinaten oder Normalen (was ziemlich ist) Wenn es sich um Würfel oder andere "flach schattierte" Objektnähte handelt, sollten Sie sie als eindeutige Eckpunkte speichern.

Sie können weiterhin einen Elementpuffer verwenden, wenn Sie dies tun. Sie müssen die Speichergröße Ihres Vertex-Buffer-Objekts erhöhen, und wenn Sie etwas so einfaches wie einen Cube rendern, werden Sie wahrscheinlich nicht viel Speicher sparen, aber Ihr Element-Puffer-Objekt sollte nicht größer als zuvor sein, wenn du es richtig machst.