2016-04-28 7 views
0

Kann Vertex Buffer mit Index Buffer verwendet werden und Normale angewendet werden? Es scheint, dass normal eher ein Attribut eines Gesichts ist als ein Attribut eines Eckpunkts. F. e. in einem Würfel hat jeder Eckpunkt 3 Normale, abhängig vom Gesicht.Umgang mit Normalen mit indizierter Geometrie

Gibt es eine intelligente Methode zur Verwendung von Normalen mit indizierter Geometrie? Oder muss ich nur Vertex Buffer erstellen und den Indexpuffer nicht mehr verwenden?

Vielen Dank im Voraus.

+1

Normalen sind Eckpunktattribute; Sie müssen die Scheitelpunkte duplizieren, an denen Ihr Netz nicht glatt sein soll. (In einem Würfel hat jede Ecke drei Scheitelpunkte, einen für jedes "Gesicht normal".) – molbdnilo

+0

@molbdnilo Sie sagen also, dass ich in diesem Fall 24 Scheitelpunkte anstatt nur 8 hätte, oder? Ok, und wie wäre es mit dem Fall, wo ich zum Beispiel ein komplexes menschliches Gesicht Mesh habe? –

+0

Menschliche Gesichter sind glatt, wie die meisten Dinge in der Natur. – molbdnilo

Antwort

1

Ja, es ist möglich und noch besser, indizierte Flächen zu verwenden. Alle Normals werden für jede Vertex wie Positions gespeichert.

Für Cube wird es mehr Vertices im Vergleich mit keinem normalen Modell geben. Aber für Sphere gibt es die gleichen Scheitelpunkte (normal für benachbarte Flächen).

Es ist besser, Normalen zu berechnen, wenn Sie die Quellengeometrie kennen, andernfalls könnte das Ergebnis nicht zuverlässig sein. Zum Beispiel könnten glatte Zylinder und Prismen dieselben Positionen haben.

+0

Lass uns annehmen, dass ich schon Normalen habe (zB aus der OBJ-Datei im Blender). Ohne Normalen hätte ich 8 Verizierungen und 24 Indizes. Wie kann ich indizierte Gesichter in diesem Beispiel verwenden? Die Verwendung eines Normals pro Vertex wäre falsch, da es je nach Gesicht unterschiedlich schattiert wäre. –

+1

Sie haben viele Vertices mit derselben Position und verschiedenen Normalen. Wenn noramls nicht mit der Position übereinstimmt (wie in .OBJ), müssen Sie alle eindeutigen Paare von PositionIndex und NormalIndex finden. –

+0

Ok, verstanden, danke. Also im Grunde ist Cube ein schlechtes Beispiel, da es genau 24 eindeutige Ecken geben wird, richtig? : P Sphear würde sich besser verhalten, ist das korrekt? –