2015-12-19 2 views
0

Мне удалось создать базовый движок воксела, который использует Perlin Noise для создания массива моделей. Все прошло хорошо, но как только я перевернул мир размером до 200x200 блоков, я получаю ОГРОМНОЕ отставание. Я считаю, что это происходит, потому что я каждый отдельный рендеринг. Как я могу это исправить? Я слышал о том, чтобы использовать куски, но я не могу на самом деле окунуться в них. Я отправлю код по запросу: D Какие-нибудь идеи?Огромное отставание при рендеринге двигателя Voxel LIBGDX

ответ

1

Оказание каждого вокселя индивидуально, очевидно, является причиной задержки. Чтобы исправить это, вы должны визуализировать «куски» вокселов одновременно, а не каждый воксель отдельно.

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

Мир затем состоит из нескольких кусков, используя карту/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

Смежные вопросы