载入中...
搜索中...
未找到
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
28inline constexpr int faceDirCount() { return int(FaceDir::Count); }
29
31inline const char *faceDirName(FaceDir d) {
32 switch (d) {
33 case FaceDir::PosX: return "posX";
34 case FaceDir::NegX: return "negX";
35 case FaceDir::PosY: return "posY";
36 case FaceDir::NegY: return "negY";
37 case FaceDir::PosZ: return "posZ";
38 case FaceDir::NegZ: return "negZ";
39 default: return "";
40 }
41}
42
44inline bool faceDirFromName(const std::string &name, FaceDir &out) {
45 if (name == "posX" || name == "+x") {
46 out = FaceDir::PosX;
47 return true;
48 }
49 if (name == "negX" || name == "-x") {
50 out = FaceDir::NegX;
51 return true;
52 }
53 if (name == "posY" || name == "+y") {
54 out = FaceDir::PosY;
55 return true;
56 }
57 if (name == "negY" || name == "-y") {
58 out = FaceDir::NegY;
59 return true;
60 }
61 if (name == "posZ" || name == "+z") {
62 out = FaceDir::PosZ;
63 return true;
64 }
65 if (name == "negZ" || name == "-z") {
66 out = FaceDir::NegZ;
67 return true;
68 }
69 return false;
70}
71
77inline FaceDir rotateFaceY(FaceDir dir, int quarterTurns) {
78 if (dir == FaceDir::PosY || dir == FaceDir::NegY) return dir;
80 const int t = quarterTurns & 3;
81 for (int i = 0; i < 4; ++i) {
82 if (cycle[i] == dir) return cycle[(i + t) & 3];
83 }
84 return dir;
85}
86
88inline void faceNormal(FaceDir d, float &nx, float &ny, float &nz) {
89 nx = ny = nz = 0.f;
90 switch (d) {
91 case FaceDir::PosX: nx = 1.f; break;
92 case FaceDir::NegX: nx = -1.f; break;
93 case FaceDir::PosY: ny = 1.f; break;
94 case FaceDir::NegY: ny = -1.f; break;
95 case FaceDir::PosZ: nz = 1.f; break;
96 case FaceDir::NegZ: nz = -1.f; break;
97 default: break;
98 }
99}
100
101} // namespace eve::voxel
float nx
float nz
float ny
std::string name
float d
float t
V3 dir
Definition TreeMesh.cpp:150
方块类型定义:名字、各面图集纹理、方向性、组合声明。 方向性方块在注册时按 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:88
const char * faceDirName(FaceDir d)
Face dir name.
Definition FaceDir.h:31
constexpr int faceDirCount()
Face dir count.
Definition FaceDir.h:28
bool faceDirFromName(const std::string &name, FaceDir &out)
Face dir from name.
Definition FaceDir.h:44
FaceDir rotateFaceY(FaceDir dir, int quarterTurns)
绕 Y 轴旋转一个面方向 quarterTurns 个 90°(右手定则:+X → -Z → -X → +Z)。 仅影响 4 个水平面(±X/±Z),±Y 顶/底保持不变。 供方向性方块在注册各面纹理时...
Definition FaceDir.h:77
FaceDir
Six axis-aligned face directions. Each chunk keeps a separate instance buffer per direction so camera...
Definition FaceDir.h:17