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