载入中...
搜索中...
未找到
Mesh.h
浏览该文件的文档.
1#pragma once
2
3#include "graphics/Drawable.h"
4
5#include <cstdint>
6#include <string>
7#include <unordered_map>
8#include <vector>
9
10namespace eve::graphics {
11
18class Mesh : public Drawable {
19public:
20 int indexCount = 0;
21 void *gpuHandle = nullptr; // vulkan::GpuMesh*
22
29 float boundsCx = 0.f;
30 float boundsCy = 0.f;
31 float boundsCz = 0.f;
32 float boundsRadius = 0.f;
33
35 bool hasBounds() const { return boundsRadius > 0.f; }
36
38 void computeBounds(const float *posXYZ, int vertexCount);
39
40 void draw(Graphics * /*gfx*/, const glm::mat4 & /*matrix*/) const override {}
46 void drawOcclusion(Graphics *gfx, const glm::mat4 &matrix) const override;
47
48 // ---- morph targets (CPU) ----
49 void clearMorphData();
51 void initMorphBase(int vertexCount, const float *posXYZ, const float *nrmXYZ = nullptr,
52 const float *uvST = nullptr);
54 bool addMorphTarget(const std::string &name, const float *deltaPosXYZ);
56 bool addMorphTargetAbsolute(const std::string &name, const float *absPosXYZ);
57
58 int getVertexCount() const;
59 int getMorphCount() const;
60 std::string getMorphName(int index) const;
61 bool hasMorph(const std::string &name) const;
62 bool setMorphWeight(const std::string &name, float weight);
63 float getMorphWeight(const std::string &name) const;
64 void clearMorphWeights();
65 bool isMorphDirty() const { return morphDirty_; }
66 void markMorphClean() { morphDirty_ = false; }
67 bool hasMorphData() const { return !basePos_.empty(); }
68
70 void computeMorphedPositions(std::vector<float> &outPos, std::vector<float> &outNrm) const;
71
72 const std::vector<float> &baseUv() const { return baseUv_; }
73
74private:
75 struct MorphTarget {
76 std::string name;
77 std::vector<float> deltaPos; // xyz packed, size = vertexCount*3
78 };
79
80 std::vector<float> basePos_;
81 std::vector<float> baseNrm_;
82 std::vector<float> baseUv_;
83 std::vector<MorphTarget> morphs_;
84 std::unordered_map<std::string, float> morphWeights_;
85 bool morphDirty_ = false;
86};
87
88} // namespace eve::graphics
const char * name
Definition RockMesh.cpp:21
Drawable base (textures, meshes, canvases).
Definition Drawable.h:17
GPU mesh handle (+ optional CPU morph targets).
Definition Mesh.h:18
bool hasMorphData() const
Definition Mesh.h:67
void initMorphBase(int vertexCount, const float *posXYZ, const float *nrmXYZ=nullptr, const float *uvST=nullptr)
Capture base pose (xyz packed). Optional normals/uvs (same vertex count).
Definition Mesh.cpp:61
bool isMorphDirty() const
Definition Mesh.h:65
void clearMorphData()
Definition Mesh.cpp:52
void computeBounds(const float *posXYZ, int vertexCount)
Compute the bounding sphere (centroid + max radius) from positions.
Definition Mesh.cpp:10
bool setMorphWeight(const std::string &name, float weight)
Definition Mesh.cpp:116
bool addMorphTarget(const std::string &name, const float *deltaPosXYZ)
Definition Mesh.cpp:77
bool hasMorph(const std::string &name) const
Definition Mesh.cpp:112
float boundsCx
Model-space bounding sphere used for view/cascade frustum culling. Computed from vertex positions at ...
Definition Mesh.h:29
const std::vector< float > & baseUv() const
Definition Mesh.h:72
void drawOcclusion(Graphics *gfx, const glm::mat4 &matrix) const override
Screen-space black proxy for volumetric occlusion. Interprets matrix as 2D affine (translation + scal...
Definition Mesh.cpp:42
void draw(Graphics *, const glm::mat4 &) const override
Draws the object with the specified transformation matrix.
Definition Mesh.h:40
float getMorphWeight(const std::string &name) const
Definition Mesh.cpp:128
bool addMorphTargetAbsolute(const std::string &name, const float *absPosXYZ)
Absolute morph (Assimp aiAnimMesh style): stored as delta from base.
Definition Mesh.cpp:89
bool hasBounds() const
True when a valid bounding sphere is available for culling.
Definition Mesh.h:35
void clearMorphWeights()
Definition Mesh.cpp:133
void * gpuHandle
Definition Mesh.h:21
int getMorphCount() const
Definition Mesh.cpp:105
std::string getMorphName(int index) const
Definition Mesh.cpp:107
void markMorphClean()
Definition Mesh.h:66
float boundsRadius
Definition Mesh.h:32
int getVertexCount() const
Definition Mesh.cpp:103
void computeMorphedPositions(std::vector< float > &outPos, std::vector< float > &outNrm) const
Bake current weights into outPos / outNrm (xyz packed).
Definition Mesh.cpp:142
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition AnimTrail.h:6