Ich lese gerade einen Code (speziell Beispielcode für das Oculus Mobile SDK, das nur einige farbige Würfel rendert), wo er ein Vertex-Shader-Attribut mit glGetAttribLocation
abruft (im Shader ist es eine mat4
, es ist die Transformationsmatrix), dann ein wenig weiter unten macht er einige Sachen, wo er zu diesem Shader-Attributindex hinzufügt.Was bewirkt das Hinzufügen eines GLuint-Attributindex?
VertexTransformAttribute = glGetAttribLocation(Program.Program, "VertexTransform");
//some stuff happens in between
for (int i = 0; i < 4; i++)
{
GL(glEnableVertexAttribArray(VertexTransformAttribute + i));
GL(glVertexAttribPointer(VertexTransformAttribute + i, 4, GL_FLOAT,
false, 4 * 4 * sizeof(float), (void *)(i * 4 * sizeof(float))));
GL(glVertexAttribDivisor(VertexTransformAttribute + i, 1));
}
Zu einem gewissen Grad, ich verstehe, dass er für alle Würfel etwas mit der Transformationsmatrix tut, aber ich bin nicht sicher, was den Index hinzugefügt wird.
Jede Hilfe, die diesen Teil erklärt, würde geschätzt werden!
Um zu erweitern, was in diesem Beispiel speziell passiert, ist, dass der Beispielschreiber die Modelltransformation (normalerweise dargestellt als ein mat4) für jedes gerenderte Objekt in einen Puffer verschiebt, so dass sie anschließend alle mit einem einzigen Aufruf gerendert werden können zu einem instanziierten Anruf. Weitere Informationen finden Sie unter http://learnopengl.com/#!Advanced-OpenGL/Instancing, einschließlich eines Abschnitts, in dem der Autor etwas Ähnliches tut, jedoch keine Schleife verwendet. – Jherico