Bisher habe ich nur glDrawArrays benutzt und würde gerne einen Indexpuffer und indizierte Dreiecke verwenden. Ich zeichne ein etwas kompliziertes Objekt mit Texturkoordinaten, Normalen und Vertexkoordinaten. All diese Daten werden in einem einzigen verschachtelten Eckpunktpufferspeicher gesammelt und gezeichnet Anrufe mit ähnlich ist (Unter der Annahme, alle Serup richtig gemacht):openGL glDrawElements mit interleaved buffers
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);
Enthält diese ermöglichen m_indexData auch mit den Indizes meiner Normalen verschachtelt werden und Texturkoordinaten sowie das Standard-Positionsindexarray? Oder nimmt es eine einzelne lineare Liste von Fehlern an, die für das gesamte Eckpunktformat (POS, NOR, TEX) gelten? Wenn Letzteres wahr ist, wie ist es dann möglich, denselben Vertex mit verschiedenen Texturkoordinaten oder Normalen zu rendern?
Ich denke, diese Frage könnte auch umformuliert werden: wenn ich 3 separate indexierte Listen (POS, NOR, TEX) hätte, wo die letzteren 2 nicht neu angeordnet werden können, um die gleiche Indexliste wie die erste zu teilen, was ist der beste Weg um das zu rendern.
Nur um zu bestätigen, die in glDrawElements verwendeten Indizes auf Ihre gesamte Vertex Format anwenden , jedes Mal, wenn ein Vertex auf diesem Netz auftritt, muss es die gleichen normalen und Texturkoordinaten haben? Ich frage, weil bestimmte 3D-Apps Modelle exportieren, bei denen eine gegebene Eckpunktposition unterschiedliche Normal- und Texturkoordinaten haben kann. – DavidG
Wenn derselbe Eckpunkt in einem Netz mit zwei unterschiedlichen Sätzen von Normalen und Texturkoordinaten angezeigt werden soll, müssen Sie den Eckpunkt zweimal hinzufügen zu Arrays. Soweit es um OpenGL geht, handelt es sich um zwei verschiedene Eckpunkte. – shoosh