【发布时间】:2012-04-07 10:38:59
【问题描述】:
我正在编写一个在屏幕上绘制许多立方体的 iOS 游戏,但我在定位立方体时遇到了问题。
我有一个绘制立方体的函数draw_voxel:
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);
}
我将GLKMatrixStackRef 传递给它,将当前矩阵推到顶部并使用GLKMatrixStackTranslate 转换顶部矩阵。但是,所有立方体仍然在 (0, 0, 0) 处绘制。
我这样称呼draw_voxel:
[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);
我在互联网上找不到任何关于 GLKit 矩阵堆栈的有用信息,我真的被困住了。如何“应用”顶部矩阵以平移立方体?
【问题讨论】:
标签: objective-c opengl-es objective-c++ glkit