1

我正在尝试为我的体素游戏生成一个 10*10*10 块,渲染 1 个块非常好,但是当我使用 for 循环时它搞砸了,以下是否正确?:

    final int chunk = 10;
    final float B_SIZE = 1.0f;

    for (int x = 0; x < chunk; x++) {
        for (int y = 0; y < chunk; y++) {
            for (int z = 0; z < chunk; z++) {
                block.render();
                GL11.glTranslatef(0.0f, 0.0f, B_SIZE);
            }
            GL11.glTranslatef(0.0f, B_SIZE, -chunk * B_SIZE);
        }
        GL11.glTranslatef(B_SIZE, -chunk * B_SIZE, 0.0f);
    }

ps:block.render(); 是一个我正在渲染一个 1f*1f*1f 立方体的类,它也有自己的 vector3f,这就是我可以翻译它的原因。

4

1 回答 1

2

我将从更简单的版本开始。而不是为每个块调整矩阵。将当前矩阵推入堆栈。翻译它以绘制单个块。然后,弹出将其重置为原始状态。

final int chunk = 10;
final float B_SIZE = 1.0f;

for (int x = 0; x < chunk; x++) {
    for (int y = 0; y < chunk; y++) {
        for (int z = 0; z < chunk; z++) {
            GL11.glPushMatrix();
            GL11.glTranslatef(x*B_SIZE, y*B_SIZE, z*B_SIZE);
            block.render();
            GL11.glPopMatrix();
        }
    }
}
于 2013-06-15T19:10:54.900 回答