Polyphase Game Engine
Loading...
Searching...
No Matches
StaticMesh.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4
5#include "Assets/Material.h"
6#include "Asset.h"
7#include "Vertex.h"
8
10
11#define CREATE_CONVEX_COLLISION_MESH (PLATFORM_WINDOWS || PLATFORM_LINUX)
12
13#if EDITOR
14#include <assimp/scene.h>
15#endif
16
18{
19public:
20
22
23 StaticMesh();
25
26 void CreateRaw(
27 uint32_t numVertices,
28 Vertex* vertices,
29 uint32_t numIndices,
30 IndexType* indices);
31
32 void CreateRawColor(
33 uint32_t numVertices,
34 VertexColor* vertices,
35 uint32_t numIndices,
36 IndexType* indices);
37
38 StaticMeshResource* GetResource();
39
40 // Asset Interface
41 virtual void LoadStream(Stream& stream, Platform platform) override;
42 virtual void SaveStream(Stream& stream, Platform platform) override;
43 virtual void Create() override;
44 virtual void Destroy() override;
45 virtual bool Import(const std::string& path, ImportOptions* options) override;
46 virtual void GatherProperties(std::vector<Property>& outProps) override;
47 virtual glm::vec4 GetTypeColor() override;
48 virtual const char* GetTypeName() override;
49 virtual const char* GetTypeImportExt() override;
50
51 class Material* GetMaterial();
52 void SetMaterial(class Material* newMaterial);
53
54 uint32_t GetNumIndices() const;
55 uint32_t GetNumFaces() const;
56 uint32_t GetNumVertices() const;
57 bool HasVertexColor() const;
58
59 Vertex* GetVertices();
60 VertexColor* GetColorVertices();
61 IndexType* GetIndices();
62
63 Bounds GetBounds() const;
64
65 btBvhTriangleMeshShape* GetTriangleCollisionShape();
66 btCollisionShape* GetCollisionShape();
67 void SetCollisionShape(btCollisionShape* shape);
68 void SetCollisionShapes(uint32_t numCollisionShapes, btCollisionShape** collisionShapes, btTransform* transforms, bool compound);
69
70 void SetGenerateTriangleCollisionMesh(bool generate);
71 bool IsTriangleCollisionMeshEnabled() const;
72 uint32_t GetVertexSize() const;
73
74 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
75
76private:
77
78 bool ShouldGenerateTriangleCollision() const;
79
80 void CreateTriangleCollisionShape();
81 void DestroyTriangleCollisionShape();
82
83 void ResizeVertexArray(uint32_t newSize);
84 void ResizeIndexArray(uint32_t newSize);
85
86 void ComputeBounds();
87
88 MaterialRef mMaterial;
89 uint32_t mNumVertices;
90 uint32_t mNumIndices;
91 uint32_t mNumUvMaps;
92
93 void* mVertices;
94 IndexType* mIndices;
95
96 Bounds mBounds;
97
98 btCollisionShape* mCollisionShape;
99 btBvhTriangleMeshShape* mTriangleCollisionShape;
100 btTriangleIndexVertexArray* mTriangleIndexVertexArray;
101 btTriangleInfoMap* mTriangleInfoMap;
102 bool mGenerateTriangleCollisionMesh;
103 bool mHasVertexColor;
104
105 // Graphics Resource
106 StaticMeshResource mResource;
107
108#if EDITOR
109public:
110 void Create(
111 const aiScene* scene,
112 const aiMesh& meshData,
113 uint32_t numCollisionMeshes,
114 const aiMesh** collisionMeshes);
115protected:
116 std::vector<uint32_t> mPureVertexColors;
117#endif
118
119#if CREATE_CONVEX_COLLISION_MESH
120public:
121 void CreateCollisionMesh(btCollisionShape* collisionShape);
122 std::vector<StaticMesh*> mCollisionMeshes;
123#endif // EDITOR
124};
Platform
Definition EngineTypes.h:31
uint16_t IndexType
Definition GraphicsTypes.h:121
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Bounds ComputeBounds(const std::vector< T > &vertices)
Definition Utilities.h:153
Definition AssetRef.h:18
Definition Asset.h:113
virtual bool Import(const std::string &path, ImportOptions *options=nullptr)
Definition Asset.cpp:244
virtual void Create()
Definition Asset.cpp:77
virtual void SaveStream(Stream &stream, Platform platform)
Definition Asset.cpp:236
virtual glm::vec4 GetTypeColor()
Definition Asset.cpp:254
virtual const char * GetTypeImportExt()
Definition Asset.cpp:264
virtual const char * GetTypeName()
Definition Asset.cpp:259
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Asset.cpp:249
virtual void LoadStream(Stream &stream, Platform platform)
Definition Asset.cpp:222
virtual void Destroy()
Definition Asset.cpp:87
Definition Datum.h:164
Definition Asset.h:102
Definition Material.h:48
Definition StaticMesh.h:18
DECLARE_ASSET(StaticMesh, Asset)
Definition Stream.h:21
Definition EngineTypes.h:193
Definition GraphicsTypes.h:162
Definition Vertex.h:28
Definition Vertex.h:20