载入中...
搜索中...
未找到
FaceDir.h
浏览该文件的文档.
1#pragma once
2
3#include <cstdint>
4#include <string>
5
6namespace eve::voxel {
7
17enum class FaceDir : uint8_t {
18 PosX = 0,
19 NegX = 1,
20 PosY = 2,
21 NegY = 3,
22 PosZ = 4,
23 NegZ = 5,
24 Count = 6,
25};
26
27inline constexpr int faceDirCount() { return int(FaceDir::Count); }
28
29inline const char *faceDirName(FaceDir d) {
30 switch (d) {
31 case FaceDir::PosX: return "posX";
32 case FaceDir::NegX: return "negX";
33 case FaceDir::PosY: return "posY";
34 case FaceDir::NegY: return "negY";
35 case FaceDir::PosZ: return "posZ";
36 case FaceDir::NegZ: return "negZ";
37 default: return "";
38 }
39}
40
41inline bool faceDirFromName(const std::string &name, FaceDir &out) {
42 if (name == "posX" || name == "+x") {
43 out = FaceDir::PosX;
44 return true;
45 }
46 if (name == "negX" || name == "-x") {
47 out = FaceDir::NegX;
48 return true;
49 }
50 if (name == "posY" || name == "+y") {
51 out = FaceDir::PosY;
52 return true;
53 }
54 if (name == "negY" || name == "-y") {
55 out = FaceDir::NegY;
56 return true;
57 }
58 if (name == "posZ" || name == "+z") {
59 out = FaceDir::PosZ;
60 return true;
61 }
62 if (name == "negZ" || name == "-z") {
63 out = FaceDir::NegZ;
64 return true;
65 }
66 return false;
67}
68
74inline FaceDir rotateFaceY(FaceDir dir, int quarterTurns) {
75 if (dir == FaceDir::PosY || dir == FaceDir::NegY) return dir;
77 const int t = quarterTurns & 3;
78 for (int i = 0; i < 4; ++i) {
79 if (cycle[i] == dir) return cycle[(i + t) & 3];
80 }
81 return dir;
82}
83
85inline void faceNormal(FaceDir d, float &nx, float &ny, float &nz) {
86 nx = ny = nz = 0.f;
87 switch (d) {
88 case FaceDir::PosX: nx = 1.f; break;
89 case FaceDir::NegX: nx = -1.f; break;
90 case FaceDir::PosY: ny = 1.f; break;
91 case FaceDir::NegY: ny = -1.f; break;
92 case FaceDir::PosZ: nz = 1.f; break;
93 case FaceDir::NegZ: nz = -1.f; break;
94 default: break;
95 }
96}
97
98} // namespace eve::voxel
const char * name
Definition RockMesh.cpp:21
int d
V3 dir
Definition TreeMesh.cpp:121
方块类型定义:名字、各面图集纹理、方向性、组合声明。 方向性方块在注册时按 orientation 绕 Y 轴展开成多个"具体类型"变体, 每个变体持有旋转后的各面纹理;渲染端只消费纹理 id,不接触 ...
Definition Chunk.h:12
void faceNormal(FaceDir d, float &nx, float &ny, float &nz)
Outward unit normal for the face.
Definition FaceDir.h:85
const char * faceDirName(FaceDir d)
Definition FaceDir.h:29
constexpr int faceDirCount()
Definition FaceDir.h:27
bool faceDirFromName(const std::string &name, FaceDir &out)
Definition FaceDir.h:41
FaceDir rotateFaceY(FaceDir dir, int quarterTurns)
绕 Y 轴旋转一个面方向 quarterTurns 个 90°(右手定则:+X → -Z → -X → +Z)。 仅影响 4 个水平面(±X/±Z),±Y 顶/底保持不变。 供方向性方块在注册各面纹理时...
Definition FaceDir.h:74
FaceDir
Six axis-aligned face directions. Each chunk keeps a separate instance buffer per direction so camera...
Definition FaceDir.h:17