Polyphase Game Engine
Loading...
Searching...
No Matches
InstancedMesh3d.h
Go to the documentation of this file.
1#pragma once
2
4
6{
7 glm::vec3 mPosition = {0.0f, 0.0f, 0.0f};
8 glm::vec3 mRotation = {0.0f, 0.0f, 0.0f};
9 glm::vec3 mScale = {1.0f, 1.0f, 1.0f};
10};
11
12// POLYPHASE_API: exported for native addons (e.g. the Houdini HDA addon bakes
13// instance point clouds into InstancedMesh3D nodes). Note that per-instance
14// scale is uniform — CalculateInstanceTransform uses MeshInstanceData::mScale.x
15// for all three axes.
17{
18public:
19
21
24
25 virtual const char* GetTypeName() const override;
26 virtual void GatherProperties(std::vector<Property>& outProps) override;
27
28 virtual void Create() override;
29 virtual void Destroy() override;
30 virtual void Render() override;
31 virtual void Tick(float deltaTime) override;
32 virtual void EditorTick(float deltaTime) override;
33
34 virtual void SaveStream(Stream& stream, Platform platform) override;
35 virtual void LoadStream(Stream& stream, Platform platform, uint32_t version) override;
36
37 virtual bool IsInstancedMesh3D() const override;
38
39 virtual void SetStaticMesh(StaticMesh* staticMesh);
40
41 virtual Bounds GetLocalBounds() const override;
42 virtual AABB GetLocalAABB() const override;
43
44 virtual void GatherProxyDraws(std::vector<DebugDraw>& inoutDraws) override;
45
46 uint32_t GetNumInstances() const;
47 const MeshInstanceData& GetInstanceData(int32_t index) const;
48 const std::vector<MeshInstanceData>& GetInstanceData() const;
49 void SetInstanceData(int32_t index, const MeshInstanceData& data);
50 void SetInstanceData(const std::vector<MeshInstanceData>& data);
51 void AddInstanceData(const MeshInstanceData& data, int32_t index = -1);
52 void RemoveInstanceData(int32_t index);
53
54 uint32_t GetTotalVertexCount() const;
55
56 bool IsInstanceDataDirty() const;
57 void MarkInstanceDataDirty();
58 void UpdateInstanceData();
59 bool WasInstanceDataUpdatedThisFrame() const;
60
61 bool ShouldUnroll() const;
62
63 InstancedMeshCompResource* GetInstancedMeshResource();
64
65 btTransform CalculateInstanceBulletTransform(int32_t instanceIndex);
66 glm::mat4 CalculateInstanceTransform(int32_t instanceIndex);
67 Bounds CalculateInstanceBounds(int32_t instanceIndex);
68
69 btCompoundShape* GeneratePaintCollisionShape();
70 btCompoundShape* GenerateTriangleCollisionShape();
71
72protected:
73
74 virtual void RecreateCollisionShape() override;
75 void CalculateLocalBounds();
76
77 void Unroll();
78
79 std::vector<MeshInstanceData> mInstanceData;
80 float mUnrolledCullDistance = 0.0f;
81 float mUnrolledCellSize = 25.0f;
82 bool mAlwaysUnroll = false;
83
84 bool mInstanceDataDirty = true;
85 bool mInstanceDataUpdatedThisFrame = false;
86 bool mUnrolled = false;
89
91};
Platform
Definition EngineTypes.h:32
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition InstancedMesh3d.h:17
InstancedMeshCompResource mInstancedMeshResource
Definition InstancedMesh3d.h:90
DECLARE_NODE(InstancedMesh3D, StaticMesh3D)
AABB mAABB
Definition InstancedMesh3d.h:88
Bounds mBounds
Definition InstancedMesh3d.h:87
std::vector< MeshInstanceData > mInstanceData
Definition InstancedMesh3d.h:79
virtual bool IsInstancedMesh3D() const
Definition Mesh3d.cpp:139
virtual void EditorTick(float deltaTime)
Definition Node.cpp:578
virtual void Tick(float deltaTime) override
Definition Primitive3d.cpp:163
Definition StaticMesh3d.h:12
virtual AABB GetLocalAABB() const override
Definition StaticMesh3d.cpp:271
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition StaticMesh3d.cpp:74
virtual void GatherProxyDraws(std::vector< DebugDraw > &inoutDraws) override
Definition StaticMesh3d.cpp:241
virtual void LoadStream(Stream &stream, Platform platform, uint32_t version) override
Definition StaticMesh3d.cpp:121
virtual void Render() override
Definition StaticMesh3d.cpp:218
virtual void SaveStream(Stream &stream, Platform platform) override
Definition StaticMesh3d.cpp:107
virtual void Create() override
Definition StaticMesh3d.cpp:88
virtual void Destroy() override
Definition StaticMesh3d.cpp:95
virtual void SetStaticMesh(StaticMesh *staticMesh)
Definition StaticMesh3d.cpp:157
virtual void RecreateCollisionShape()
Definition StaticMesh3d.cpp:312
virtual const char * GetTypeName() const override
Definition StaticMesh3d.cpp:69
virtual Bounds GetLocalBounds() const override
Definition StaticMesh3d.cpp:259
Definition StaticMesh.h:18
Definition Stream.h:21
Definition EngineTypes.h:210
Definition EngineTypes.h:201
Definition GraphicsTypes.h:228
Definition InstancedMesh3d.h:6
glm::vec3 mScale
Definition InstancedMesh3d.h:9
glm::vec3 mPosition
Definition InstancedMesh3d.h:7
glm::vec3 mRotation
Definition InstancedMesh3d.h:8