10#include <unordered_map>
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);
48 bool appendTransformed(
const MeshBuild *other,
float tx,
float ty,
float tz,
49 float yawDegrees,
float sx,
float sy,
float sz);
52 int setActiveGroup(
const std::string &
name);
54 int getGroupCount()
const;
56 std::string getGroupName(
int groupIndex)
const;
58 int getTriangleGroup(
int triangleIndex)
const;
62 const std::vector<std::string> &
groupNames()
const {
return groupNames_; }
74 [[nodiscard]]
eve::Result<void> restoreGroupData(std::vector<std::string> names, std::vector<int> assignments,
82 [[nodiscard]] std::unique_ptr<MeshBuild> copyGroup(
int groupIndex)
const;
84 int getVertexCount()
const;
86 int getIndexCount()
const;
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;
116 [[nodiscard]]
eve::
Result<
void> setColor(
int vertexIndex,
float r,
float g,
float b,
float a);
117 int getIndex(
int i) const;
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_; }
140 std::vector<float> &
normals() {
return normals_; }
142 std::vector<float> &
uvs() {
return uvs_; }
144 std::vector<uint32_t> &
indices() {
return indices_; }
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_;
#define EVENGINE_API_DOMAINS
std::uint32_t vertexCount
std::vector< float > positions
Move-only, checked operation results for the common layer.
std::vector< float > colors
Move-only operation result carrying either a value or Status.
CPU triangle mesh from procedural mesh recipes (e.g. marching cubes). Positions/normals are xyz-packe...
const std::vector< int > & triangleGroups() const
Return the dense triangle-to-group assignments.
const std::vector< float > & normals() const
Normals.
std::vector< uint32_t > & indices()
Indices.
const std::vector< float > & colors() const
Colors.
std::vector< float > & uvs()
Uvs.
const std::unordered_map< std::string, std::string > & metadata() const
Return all metadata key/value pairs in deterministic map order.
const std::vector< std::string > & groupNames() const
Return the stable ordered group names.
int activeGroup() const
Return the currently selected group, or -1 when none is active.
std::vector< float > & normals()
Normals.
std::vector< float > & positions()
Positions.
const std::vector< float > & uvs() const
Uvs.
const std::vector< uint32_t > & indices() const
Indices.
const char * defaultValue
Build metadata (engine git commit, build time, third-party version).