java - 如何使用 for 循环生成简单地形 [voxel]

标签 java opengl lwjgl

我正在尝试为我的体素游戏生成 10*10*10 block block ,渲染 1 block 完全没问题,但是当我使用 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);
    }

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

最佳答案

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

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();
        }
    }
}

关于java - 如何使用 for 循环生成简单地形 [voxel],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17126903/

相关文章:

Java + Selenium

java - 将 OpenGL 深度缓冲区转换为距相机的世界空间 z 距离?

java - (OpenGL) 将大内容限制在更小的区域

java - LWJGL - 帮助移动纹理立方体

java - 内部类的通用数组创建

java - 无法访问在设计 View 中创建的 Netbeans 数组

java - 如何清除应用程序引擎中的所有内存缓存。 Java环境

c - 如何在 mac os x 上基于 openGL 上下文创建 OpenCL 上下文

java - 将JOGL打包成fat JAR

java - 旧版 OpenGL 纹理