2015-12-19 51 views
0

我設法使自己成爲一個基本的體素引擎,它使用Perlin噪聲來生成一系列模型。一切都很順利,但只要我把世界的規模擴大到200x200塊,我就會變得巨大滯後。我相信這是因爲我正在渲染每個區塊。我怎樣才能解決這個問題?我聽說過使用塊,但我不能真正讓我的頭在他們周圍。我會根據請求發佈代碼:D任何見解?渲染LIBGDX體素引擎時產生巨大的滯後效應

回答

1

單獨渲染每個體素顯然是滯後的原因。爲了解決這個問題,你應該立即呈現「塊」的體素,而不是單獨的每個體素。

塊是體素的小陣列。通常會爲每個塊生成一個網格和一個頂點緩衝區,以便可以渲染每個塊。

// 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