渲染 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
我设法让自己成为一个基本的体素引擎,它使用 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