载入中...
搜索中...
未找到
MeshBuild.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "common/Result.h"
6
7#include <cstdint>
8#include <memory>
9#include <string>
10#include <unordered_map>
11#include <vector>
12
13namespace eve::procgen {
14
20public:
22 void clear();
24 void reserve(int vertexCount, int indexCount);
25
27 void addVertex(float px, float py, float pz, float nx, float ny, float nz, float u, float v);
29 void addTriangle(uint32_t i0, uint32_t i1, uint32_t i2);
30
48 bool appendTransformed(const MeshBuild *other, float tx, float ty, float tz,
49 float yawDegrees, float sx, float sy, float sz);
50
52 int setActiveGroup(const std::string &name);
54 int getGroupCount() const;
56 std::string getGroupName(int groupIndex) const;
58 int getTriangleGroup(int triangleIndex) const;
60 const std::vector<int> &triangleGroups() const { return triangleGroups_; }
62 const std::vector<std::string> &groupNames() const { return groupNames_; }
64 int activeGroup() const { return activeGroup_; }
74 [[nodiscard]] eve::Result<void> restoreGroupData(std::vector<std::string> names, std::vector<int> assignments,
75 int activeGroup);
82 [[nodiscard]] std::unique_ptr<MeshBuild> copyGroup(int groupIndex) const;
83
84 int getVertexCount() const;
86 int getIndexCount() const;
88 bool empty() const;
89
91 float getPositionX(int i) const;
93 float getPositionY(int i) const;
95 float getPositionZ(int i) const;
97 float getNormalX(int i) const;
99 float getNormalY(int i) const;
101 float getNormalZ(int i) const;
103 float getUvU(int i) const;
105 float getUvV(int i) const;
107 [[nodiscard]] bool hasVertexColors() const noexcept;
109 [[nodiscard]] float getColor(int vertexIndex, int component) const noexcept;
111 [[nodiscard]] eve::Result<void> setVertexColors(std::vector<float> colors);
116 [[nodiscard]] eve::Result<void> setColor(int vertexIndex, float r, float g, float b, float a);
117 int getIndex(int i) const;
118
120 void setMeta(const std::string &key, const std::string &value);
122 std::string getMeta(const std::string &key, const std::string &defaultValue) const;
123
125 const std::vector<float> &positions() const { return positions_; }
127 const std::vector<float> &normals() const { return normals_; }
129 const std::vector<float> &uvs() const { return uvs_; }
131 const std::vector<float> &colors() const { return colors_; }
133 const std::vector<uint32_t> &indices() const { return indices_; }
135 const std::unordered_map<std::string, std::string> &metadata() const { return meta_; }
136
138 std::vector<float> &positions() { return positions_; }
140 std::vector<float> &normals() { return normals_; }
142 std::vector<float> &uvs() { return uvs_; }
144 std::vector<uint32_t> &indices() { return indices_; }
145
146private:
147 std::vector<float> positions_;
148 std::vector<float> normals_;
149 std::vector<float> uvs_;
150 std::vector<float> colors_;
151 std::vector<uint32_t> indices_;
152 std::vector<int> triangleGroups_;
153 std::vector<std::string> groupNames_;
154 int activeGroup_ = -1;
155 std::unordered_map<std::string, std::string> meta_;
156};
157
158} // namespace eve::procgen
double value
float py
float nx
float nz
float ny
float pz
#define EVENGINE_API_DOMAINS
Definition Export.h:110
std::uint32_t vertexCount
std::uint32_t indexCount
tensor::Graph g
Definition GpuGraph.cpp:7
std::uint32_t key
uint32_t i1
Definition Grass.cpp:61
uint32_t i2
Definition Grass.cpp:61
uint32_t i0
Definition Grass.cpp:61
float u
Definition Grass.cpp:233
double r
std::vector< float > positions
float v
std::vector< Colorf > px
std::string name
MeleePoint3 b
Definition MeleeHit.cpp:41
MeleePoint3 a
Definition MeleeHit.cpp:40
Move-only, checked operation results for the common layer.
std::vector< float > colors
Move-only operation result carrying either a value or Status.
Definition Result.h:155
CPU triangle mesh from procedural mesh recipes (e.g. marching cubes). Positions/normals are xyz-packe...
Definition MeshBuild.h:19
const std::vector< int > & triangleGroups() const
Return the dense triangle-to-group assignments.
Definition MeshBuild.h:60
const std::vector< float > & normals() const
Normals.
Definition MeshBuild.h:127
std::vector< uint32_t > & indices()
Indices.
Definition MeshBuild.h:144
const std::vector< float > & colors() const
Colors.
Definition MeshBuild.h:131
std::vector< float > & uvs()
Uvs.
Definition MeshBuild.h:142
const std::unordered_map< std::string, std::string > & metadata() const
Return all metadata key/value pairs in deterministic map order.
Definition MeshBuild.h:135
const std::vector< std::string > & groupNames() const
Return the stable ordered group names.
Definition MeshBuild.h:62
int activeGroup() const
Return the currently selected group, or -1 when none is active.
Definition MeshBuild.h:64
std::vector< float > & normals()
Normals.
Definition MeshBuild.h:140
std::vector< float > & positions()
Positions.
Definition MeshBuild.h:138
const std::vector< float > & uvs() const
Uvs.
Definition MeshBuild.h:129
const std::vector< uint32_t > & indices() const
Indices.
Definition MeshBuild.h:133
const char * defaultValue
Build metadata (engine git commit, build time, third-party version).
Definition Build.cpp:16