Ich schreibe ein iOS-Spiel, das viele Würfel auf dem Bildschirm zeichnet, aber ich habe ein Problem mit der Positionierung der Würfel.Wie GLKMatrixStack zu verwenden?
I haben eine Funktion, die einen Würfel draw_voxel
zieht:
void draw_voxel(Point location, Color color, GLKMatrixStackRef stack) {
GLKMatrixStackPush(stack);
GLKMatrixStackTranslate(stack, location.x, location.y, location.z);
std::array<Color, 36> triangle_colors;
triangle_colors.fill(color);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 0, static_cast<const GLvoid*>(triangle_vertices.data()));
glEnableVertexAttribArray(GLKVertexAttribColor);
glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_FALSE, 0, static_cast<const GLvoid*>(triangle_colors.data()));
glDrawArrays(GL_TRIANGLES, 0, 36);
glDisableVertexAttribArray(GLKVertexAttribPosition);
glDisableVertexAttribArray(GLKVertexAttribColor);
GLKMatrixStackPop(stack);
}
I übergeben es ein GLKMatrixStackRef
, die aktuelle Matrix oben schieben und verwenden GLKMatrixStackTranslate
die obere Matrix zu übersetzen. Alle Würfel werden jedoch immer noch bei (0, 0, 0) gezeichnet.
Ich nenne draw_voxel
wie folgt aus:
[self.effect prepareToDraw];
GLKMatrixStackRef stack = GLKMatrixStackCreate(nullptr);
draw_voxel(Point(-1.0f, 0.0f, 0.0f), Color(1.0f, 0.0f, 0.0f, 1.0f), stack);
draw_voxel(Point(+0.0f, 0.0f, 0.0f), Color(0.0f, 1.0f, 0.0f, 1.0f), stack);
draw_voxel(Point(+1.0f, 0.0f, 0.0f), Color(0.0f, 0.0f, 1.0f, 1.0f), stack);
CFRelease(stack);
ich keine nützlichen Informationen über das Internet über GLKit Matrix-Stacks finden konnte, und ich bin wirklich stecken. Wie kann ich die oberste Matrix "anwenden", damit die Cubes übersetzt werden?
Und dann senden Sie einfach '-prepareToDraw', und nach dem Aufspringen stack mach das gleiche, oder? Ich muss den Effekt nur an "draw_voxel" als Argument übergeben. –
Eigentlich bin ich mir nicht sicher, was Sie erreichen wollen. Sie erstellen bei jedem Rendering-Durchlauf einen neuen Stapel und verwenden ihn dann, um eine einzelne Übersetzung zu berechnen und die oberste Matrix zu öffnen. Soweit ich weiß, sind Matrixstacks in hierarchischen Animationssystemen nützlich. Wahrscheinlich können Sie einfach die 'GLKMatrix4', die Sie benötigen, durch einen 'GLKMatrix4MakeTranslate'-Aufruf erhalten. – Germano