0
我設法使自己成爲一個基本的體素引擎,它使用Perlin噪聲來生成一系列模型。一切都很順利,但只要我把世界的規模擴大到200x200塊,我就會變得巨大滯後。我相信這是因爲我正在渲染每個區塊。我怎樣才能解決這個問題?我聽說過使用塊,但我不能真正讓我的頭在他們周圍。我會根據請求發佈代碼:D任何見解?渲染LIBGDX體素引擎時產生巨大的滯後效應
我設法使自己成爲一個基本的體素引擎,它使用Perlin噪聲來生成一系列模型。一切都很順利,但只要我把世界的規模擴大到200x200塊,我就會變得巨大滯後。我相信這是因爲我正在渲染每個區塊。我怎樣才能解決這個問題?我聽說過使用塊,但我不能真正讓我的頭在他們周圍。我會根據請求發佈代碼:D任何見解?渲染LIBGDX體素引擎時產生巨大的滯後效應
單獨渲染每個體素顯然是滯後的原因。爲了解決這個問題,你應該立即呈現「塊」的體素,而不是單獨的每個體素。
塊是體素的小陣列。通常會爲每個塊生成一個網格和一個頂點緩衝區,以便可以渲染每個塊。
// 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 /有很多關於開發體素引擎的資源。以下是清單文章/資源: https://www.reddit.com/r/VoxelGameDev/wiki/index