Opengl Indexed Drawing

Hey Leute.

Ist ja ne Weile her dass ich mich mit Opengl beschäftigt hab, und leider sind mir einige nicht mehr so präsent.

Wie genau verfährt man nochmal bei indizierten meshes, wenn manche vertices nicht alle daten mit allen
primiven teilen?

Also beispielsweise wenn ein punkt a bestimmte texturkoordinaten (uv) in der verbindung abc , andere jedoch in der verbindung ab’c’ haben soll?
Muss man a dann eben 2 mal einfügen oder gibt es da irgendwelchen anderen Wege? Oder sollte man in kombination mit so etwas einfach gar keine
indizierten meshes benutzen oder oder?.. ^^

Danke ^^

Moin,

immer mit Indices, nie ohne. Wenn an einem Punkt im Gitternetz nicht alle Vertex-Attribute gleich sind, müssen eben entsprechend viele Vertices angelegt werden.

Siehe z.B. mein Beispiel von hier.

Ein Würfel, 8 Ecken, 24 Vertices.

Gruß
Fancy

Okay, dann mach ich das so.
Aber - gibt es einen triftigen Grund? Performance?

Was wäre denn die Alternative? Man kann diese Information nur über irgendeine Form von Indizes kodieren (bei allen Alternativen, die mir einfielen, wäre es zumindest “indirekt” so).

[ot]
Das ist immer ein ziemlicher Krampf, wenn man eine OBJ-Datei lädt: Dort gibt es (oft) DREI Index-Sets. D.h. jedes Dreieck besteht aus
3 vertex-indices
3 textur-indices
3 normalen-indices
Wenn man das in OpenGL malen will, muss man das immer erst “glattziehen” und in Single-Index umwandeln. Deswegen dann halt sowas wie https://github.com/javagl/Obj/blob/master/src/main/java/de/javagl/obj/ObjUtils.java#L63 :rolleyes:
[/ot]

Die … Vehemenz der Aussage von @Fancy “immer mit Indices, nie ohne” wundet mich jetzt aber doch ein bißchen. Was spricht dagegen, sie nicht zu verwenden, wenn man sie nicht braucht?

Die Indices werden für den Post Transform Cache benötigt. Wenn man tatsächlich eine Geometrie hat, bei der sich zwei benachbarte Dreiecke “nie” ein Vertex teilen, könnte man auch drauf verzichten. Imho ist das aber selten.

Schon beim Würfel reduziert das die Anzahl der Vertex-Shader Iterationen von 36 auf 24. Ein Triangle Strip erreicht ähnliches, kann aber immer nur die letzten 2 Vertices wiederverwenden. Der Post Transform Cache hingegen die letzten 20+ Vertices. Idealerweise kombiniert man beides.

Gruß
Fancy