20using ChunkSampler = uint8_t (*)(
void *userData,
int chunkX,
int chunkY,
int chunkZ,
21 int localX,
int localY,
int localZ);
38 static void meshChunk(
const uint8_t *voxels, std::vector<PackedRect> outFaces[6],
41 int chunkX = 0,
int chunkY = 0,
int chunkZ = 0,
42 std::vector<uint32_t> aoOut[6] =
nullptr);
45 static void meshFace(
const uint8_t *voxels,
FaceDir dir, std::vector<PackedRect> &out,
48 int chunkX = 0,
int chunkY = 0,
int chunkZ = 0,
49 std::vector<uint32_t> *aoOut =
nullptr);
52 static uint8_t
at(
const uint8_t *
v,
int x,
int y,
int z);
55 int chunkX,
int chunkY,
int chunkZ,
int nx,
int ny,
int nz);
58 int chunkX,
int chunkY,
int chunkZ,
FaceDir dir,
int slice,
62 int chunkX,
int chunkY,
int chunkZ,
FaceDir dir,
int slice,
int gu,
66 int chunkX,
int chunkY,
int chunkZ,
FaceDir dir,
int slice,
int x,
67 int y,
int z,
int w,
int h);
68 static bool isSolid(uint8_t
id) {
return id != 0; }
70 std::vector<PackedRect> &out, std::vector<uint32_t> *aoOut);
#define EVENGINE_API_DOMAINS
vk::UniqueSampler sampler
EVENGINE_API_DOMAINS public API.
Greedy rectangle mesher for one 32³ dense voxel volume. Voxel storage: index = x + y*32 + z*32*32....
方块类型定义:名字、各面图集纹理、方向性、组合声明。 方向性方块在注册时按 orientation 绕 Y 轴展开成多个"具体类型"变体, 每个变体持有旋转后的各面纹理;渲染端只消费纹理 id,不接触 ...
constexpr int kChunkSize
Chunk edge length in voxels (fixed).
uint8_t(*)(void *userData, int chunkX, int chunkY, int chunkZ, int localX, int localY, int localZ) ChunkSampler
Optional out-of-chunk neighbor sampler for seam culling. Receives chunk coordinates plus the (possibl...
FaceDir
Six axis-aligned face directions. Each chunk keeps a separate instance buffer per direction so camera...