载入中...
搜索中...
未找到
HexMeshData.h
浏览该文件的文档.
1#pragma once
2
5#include "hexmap/HexMetrics.h"
6
7#include <cstdint>
8#include <vector>
9
10namespace eve::hexmap {
11
25public:
27 void clear() noexcept;
28
30 [[nodiscard]] bool empty() const noexcept { return indices_.empty(); }
32 [[nodiscard]] std::size_t vertexCount() const noexcept { return positions_.size() / 3u; }
34 [[nodiscard]] std::size_t triangleCount() const noexcept { return indices_.size() / 3u; }
35
45 std::uint32_t addVertex(HexVec3 position, float u, float v);
46
48 void addTriangle(std::uint32_t a, std::uint32_t b, std::uint32_t c);
50 void addQuad(std::uint32_t a, std::uint32_t b, std::uint32_t c, std::uint32_t d);
51
53 void finalize() noexcept;
54
56 [[nodiscard]] const std::vector<float>& positions() const noexcept { return positions_; }
58 [[nodiscard]] const std::vector<float>& normals() const noexcept { return normals_; }
60 [[nodiscard]] const std::vector<float>& uvs() const noexcept { return uvs_; }
62 [[nodiscard]] const std::vector<std::uint32_t>& indices() const noexcept { return indices_; }
63
65 [[nodiscard]] bool hasNormals() const noexcept { return normals_.size() == positions_.size(); }
66
67private:
68 std::vector<float> positions_;
69 std::vector<float> normals_;
70 std::vector<float> uvs_;
71 std::vector<std::uint32_t> indices_;
72};
73
74} // namespace eve::hexmap
float u
Definition Grass.cpp:233
Pointy-top hex metrics, directions and vertex helpers.
float v
std::int32_t c
std::array< float, 3 > position
MeleePoint3 b
Definition MeleeHit.cpp:41
MeleePoint3 a
Definition MeleeHit.cpp:40
float d
CPU-side triangle soup for one hex chunk surface.
Definition HexMeshData.h:24
void finalize() noexcept
Computes flat per-face normals. Must be called before upload.
void addTriangle(std::uint32_t a, std::uint32_t b, std::uint32_t c)
Appends a triangle with counter-clockwise winding.
void addQuad(std::uint32_t a, std::uint32_t b, std::uint32_t c, std::uint32_t d)
Appends a quad as two triangles (a,c,b and b,c,d).
bool empty() const noexcept
Whether the mesh has no triangles.
Definition HexMeshData.h:30
std::size_t triangleCount() const noexcept
Number of triangles.
Definition HexMeshData.h:34
void clear() noexcept
Removes every vertex and index, keeping the allocated capacity.
const std::vector< float > & uvs() const noexcept
Texture coordinate stream (uv per vertex).
Definition HexMeshData.h:60
std::size_t vertexCount() const noexcept
Number of vertices.
Definition HexMeshData.h:32
const std::vector< float > & positions() const noexcept
Interleaved-free position stream (xyz per vertex).
Definition HexMeshData.h:56
const std::vector< std::uint32_t > & indices() const noexcept
Triangle index stream.
Definition HexMeshData.h:62
bool hasNormals() const noexcept
Whether finalize() produced a normal for every vertex.
Definition HexMeshData.h:65
const std::vector< float > & normals() const noexcept
Normal stream (xyz per vertex), valid after finalize().
Definition HexMeshData.h:58
std::uint32_t addVertex(HexVec3 position, float u, float v)
Appends one vertex.
Minimal 3-component float vector used by the hex mesh builders.
Definition HexMetrics.h:18