载入中...
搜索中...
未找到
GreedyMesher.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
6#include "voxel/FaceDir.h"
7#include "voxel/VoxelPack.h"
8
9#include <cstdint>
10#include <vector>
11
12namespace eve::voxel {
13
20using ChunkSampler = uint8_t (*)(void *userData, int chunkX, int chunkY, int chunkZ,
21 int localX, int localY, int localZ);
22
36public:
38 static void meshChunk(const uint8_t *voxels, std::vector<PackedRect> outFaces[6],
39 const CubeTypeRegistry &types = CubeTypeRegistry::empty(),
40 ChunkSampler sampler = nullptr, void *samplerUserData = nullptr,
41 int chunkX = 0, int chunkY = 0, int chunkZ = 0,
42 std::vector<uint32_t> aoOut[6] = nullptr);
43
45 static void meshFace(const uint8_t *voxels, FaceDir dir, std::vector<PackedRect> &out,
46 const CubeTypeRegistry &types = CubeTypeRegistry::empty(),
47 ChunkSampler sampler = nullptr, void *samplerUserData = nullptr,
48 int chunkX = 0, int chunkY = 0, int chunkZ = 0,
49 std::vector<uint32_t> *aoOut = nullptr);
50
51private:
52 static uint8_t at(const uint8_t *v, int x, int y, int z);
54 static uint8_t neighborAt(const uint8_t *voxels, ChunkSampler sampler, void *userData,
55 int chunkX, int chunkY, int chunkZ, int nx, int ny, int nz);
57 static uint8_t outsideVoxel(const uint8_t *voxels, ChunkSampler sampler, void *userData,
58 int chunkX, int chunkY, int chunkZ, FaceDir dir, int slice,
59 int gu, int gv);
61 static uint8_t vertexAO(const uint8_t *voxels, ChunkSampler sampler, void *userData,
62 int chunkX, int chunkY, int chunkZ, FaceDir dir, int slice, int gu,
63 int gv);
65 static uint32_t rectAOWord(const uint8_t *voxels, ChunkSampler sampler, void *userData,
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; }
69 static void greedy2D(int mask[kChunkSize][kChunkSize], FaceDir dir, int slice,
70 std::vector<PackedRect> &out, std::vector<uint32_t> *aoOut);
71};
72
73} // namespace eve::voxel
float w
Definition AnimClip.cpp:738
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
float z
Definition AnimClip.cpp:738
int mask
float nx
float nz
float ny
#define EVENGINE_API_DOMAINS
Definition Export.h:110
vk::UniqueSampler sampler
float v
int h
V3 dir
Definition TreeMesh.cpp:150
std::size_t at
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,不接触 ...
Definition Chunk.h:12
constexpr int kChunkSize
Chunk edge length in voxels (fixed).
Definition VoxelPack.h:8
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...
Definition FaceDir.h:17