Frage

Bisher habe ich nur verwendet glDrawArrays und möchte einen Indexpuffer und indexierten Dreiecken bewegen, über zu verwenden. Ich zeichne ein etwas kompliziertes Objekt mit Textur coords, Normalen und Vertex-Koordinaten. All diese Daten werden in einem einzigen verschachtelten Eckenpuffer gesammelt und gezeichnet mit Anrufen ähnelt (Vorausgesetzt, alle Serup ist es richtig gemacht):

glVertexPointer( 3, GL_FLOAT, 22, (char*)m_vertexData );
glNormalPointer( GL_SHORT, 22, (char*)m_vertexData+(12) );
glTexCoordPointer( 2, GL_SHORT, 22, (char*)m_vertexData+(18) );
glDrawElements(GL_TRIANGLES, m_numTriangles, GL_UNSIGNED_SHORT, m_indexData );

Ist dies ermöglicht m_indexData auch mit dem Indizes meiner Normalen und Textur coords sowie der Standardposition Index Array verschachtelt werden? Oder übernimmt er eine einzelne lineare Liste von inidices, die auf das gesamte Vertex-Format (PO, NOR, TEX) gelten? Wenn letzteres der Fall ist, wie ist es möglich, die gleiche Vertex mit unterschiedlichen Textur coords oder Normalen zu machen?

Ich denke, diese Frage auch in umformuliert werden könnte: Wenn ich 3 habe separate indizierte Listen (POS, NOR, TEX), wobei letzteres 2 nicht die gleiche Indexliste als ersten teilen neu angeordnet werden, was der beste Weg ist, machen das.

War es hilfreich?

Lösung

Sie haben keine andere Indizes für die verschiedenen Listen. Wenn Sie glArrayElement(3) angeben dann OpenGL wird das dritte Element jeder Liste nehmen.
Was Sie tun können, ist mit dem Zeiger Sie da im wesentlichen der Platz in der Liste angeben spielen, die schließlich zugegriffen wird der Zeiger von dem Anfang der Liste und der Index von Ihnen angegebenen Offset. Dies ist nützlich, wenn Sie eine Konstante zwischen den Listen versetzt haben. wenn die Listen nur eine zufällige Permutation dann ist diese Art des Spiels für jeden Knoten sind wird wahrscheinlich als costy sein, wie einfach nur alten glVertex3fv(), glNormal3fv() und glTexCoord3fv()

mit

Andere Tipps

Ich habe ähnliche Probleme versuchen, das gleiche in Direct3D 9.0

zu tun

Für meine OpenGL 3-Implementierung war es ziemlich einfach, und mein Quellcode ist online verfügbar, wenn es helfen können Ihnen jede ... https://github.com/RobertBColton /enigma-dev/blob/master/ENIGMAsystem/SHELL/Graphics_Systems/OpenGL3/GL3model.cpp

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top