OpenGL 3/4 glVertexAttribPointer Schritt und Offset Fehlberechnung

8

Ich habe ein Problem damit, mein Vertex-Array richtig zu zeigen:

%Vor%

Ich verstehe nicht, wie Schritt und Offset funktionieren. Was ist der richtige Weg um glVertexAttribPointer() in meiner Situation zu benutzen?

    
user2350858 04.05.2013, 23:48
quelle

2 Antworten

21

Schritt und Offset werden in Bytes angegeben. Sie verwenden ein verschachteltes Vertex-Array mit Position und Farbe als 4 Floats. Um vom th-ten Element in einem bestimmten Attribut-Array zum nächsten zu gelangen, gibt es den Abstand von 8 floats, so dass stride 8 * sizeof (GLfloat) sein sollte. Der Offset ist die Byteposition des ersten Elements jedes Attributarrays im Puffer. In Ihrem Beispiel für die Position ist es 0, und für die Farbe ist es 4 * sizeof (GLfloat)

    
derhass 05.05.2013 00:20
quelle
16

Da glVertexAttribPointer oft Probleme macht, versuche ich es hier weiter zu erklären.

Die Formel zum Berechnen des Startpos des i-ten Attributs im Attributfeld lautet:

startPos(i) = offset + i * stride (Aus derhass 'eine andere Antwort )

Und in der Grafik unten erklärt:

Wenn Sie ein Codebeispiel benötigen, lesen Sie weiter.

Aus VBO-Daten formatieren wissen wir, dass wir unsere Vertex-Daten in drei Formaten verwalten können. Machen Sie ein Beispiel für das Zeichnen eines Dreiecks, bei dem vert color und texture color gemischt sind. Hier können Sie vert-Attributdaten vorbereiten:

# way1 Jedes Attribut ein VBO.

dieses Format wie: (xyzxyz ...) (rgbrgb ...) (stst ....) , und wir können beide sride = 0 und offset = 0 lassen.

%Vor%

# way2: Jedes Attribut ist sequentiell und in einem einzigen VBO stapelweise angeordnet. .

Dieses Format ist wie folgt: (xyzxyzxyz ... rgbrgb ... ststst ...) , wir können stride = 0 lassen, aber Offset sollte angegeben werden.

%Vor%

# way3: Interleaved-Attribut in einem einzelnen VBO

Dieses Format ist wie folgt: (xyzrgbstxyzrgbst ...) , wir müssen manuell Offset und Schrittweite angeben.

%Vor%

Und danke für die Antwort von derhass.

    
wangdq 25.09.2016 08:16
quelle