渲染 LIBGDX 体素引擎时出现巨大延迟

Tremendous lag while rendering LIBGDX voxel engine

我设法让自己成为一个基本的体素引擎,它使用 Perlin Noise 生成一系列模型。一切都进行得很顺利,但是一旦我将世界大小调整到 200x200 块,我就会遇到巨大的延迟。我相信这种情况正在发生,因为我正在分别渲染每个块。我怎样才能解决这个问题?我听说过使用块,但我真的无法理解它们。我会 post 根据要求编写代码 :D 有什么见解吗?

单独渲染每个体素显然是延迟的原因。要解决此问题,您应该一次渲染 "chunks" 个体素,而不是单独渲染每个体素。

块是体素的小阵列。通常为每个块生成网格和顶点缓冲区,以便您可以渲染每个块。

// Simple Chunk with the size 32x32x32 voxels.
struct Chunk {
    // Constants:
    static constexpr int c_dim = 32;

    // Voxel array:
    unsigned char voxels[c_dim*c_dim*c_dim];

    // Vertex buffer:
    GLuint vbo;
    GLuint drawCount;
};

然后使用 map/unordered_map.

世界由多个区块组成
class World {
public:
    ...
private:
    // a string containing "x|y|z" is an easy way of expressing the key.
    std::map<std::string, Chunk*> m_chunks;
};

/r/VoxelGameDev/ 有大量关于开发体素引擎的资源。这是一个列表 articles/resources: https://www.reddit.com/r/VoxelGameDev/wiki/index