


Wie kann ich ein Netz in OpenGL mit separaten Vertex- und Normalindizes rendern?
Nov 27, 2024 am 03:26 AMProbleme mit dem OpenGL-Indexpuffer
Bei der Arbeit mit benutzerdefinierten Dateiformaten, die 3D-Netzdaten enthalten, ist es nicht ungewöhnlich, auf die Herausforderung separater Indizes für zu stoßen Eckpunkte und Normalen. OpenGL erfordert jedoch einen einzigen Satz von Indizes.
Das Dilemma überwinden
Der Schlüssel zur Lösung dieses Problems besteht darin, für jedes eindeutige Paar aus Vertex und einen OpenGL-Scheitelpunkt zu erstellen normale Indizes.
Algorithmus Ausarbeitung
Angenommen, Sie haben Arrays von Scheitelpunktkoordinaten (inVertices) und Normalen (inNormals), können Sie eine STL-Karte verwenden, um jedes eindeutige Scheitelpunkt-Normalen-Paar (key(vertexIdx, normalIdx)) einem zuzuordnen kombinierter Scheitelpunktindex (combinedIdx). Hier ist eine vereinfachte Pseudocode-Übersicht:
nextCombinedIdx = 0 indexMap = empty for each triangle in input file: for each corner: read vertexIdx and normalIdx if indexMap.contains(key(vertexIdx, normalIdx)): combinedIdx = indexMap.get(key(vertexIdx, normalIdx)) else: combinedIdx = nextCombinedIdx indexMap.add(key(vertexIdx, normalIdx), combinedIdx) nextCombinedIdx++ combinedVertices.add(inVertices[vertexIdx], inNormals[normalIdx]) combinedIndices.add(combinedIdx)
Dieser Algorithmus erstellt ein neues Array kombinierter Scheitelpunkte (combinedVertices) und eine entsprechende Indexliste (combinedIndices). Jedes Element von CombinedVertices stellt ein vollständiges Scheitelpunkt-Normalen-Paar dar, sodass Sie mit glDrawArrays(GL_TRIANGLES,...) rendern können.
Obwohl dieser Ansatz eine gewisse Scheitelpunktduplizierung beinhaltet, löst er effektiv das Problem inkompatibler Scheitelpunkte und Normalen Indizes und sorgt gleichzeitig für eine korrekte Netzwiedergabe.
Das obige ist der detaillierte Inhalt vonWie kann ich ein Netz in OpenGL mit separaten Vertex- und Normalindizes rendern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GULC: C -Bibliothek von Grund auf neu gebaut

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

eindeutiger Gebrauch und Phrasenfreigabe

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?
