17#include <assimp/scene.h>
112 virtual void Create()
override;
113 virtual void Destroy()
override;
121 void SetMaterial(
class Material* newMaterial);
125 uint32_t GetNumSections()
const;
128 class Material* GetSectionMaterial(uint32_t index)
const;
129 void SetSectionMaterial(uint32_t index,
class Material* material);
130 int32_t FindSectionIndex(
const std::string& name)
const;
131 const std::vector<SkeletalMeshSection>& GetSections()
const;
133 uint32_t GetNumIndices();
134 uint32_t GetNumFaces();
135 uint32_t GetNumVertices();
139 int32_t FindBoneIndex(
const std::string& name)
const;
140 const std::vector<Bone>& GetBones()
const;
141 const Bone& GetBone(int32_t index)
const;
142 uint32_t GetNumBones()
const;
144 glm::mat4 GetInvRootTransform()
const;
146 const std::vector<Animation>& GetAnimations()
const;
147 const Animation* GetAnimation(
const char* name);
150 float GetAnimationDuration(
const char* name);
152 const std::vector<VertexSkinned>& GetVertices()
const;
154 void FinalizeBoneTransforms(std::vector<glm::mat4>& inoutTransforms);
156 void CopyBindPose(std::vector<glm::mat4>& outTransforms);
162 const glm::vec3& GetBindPosePos(int32_t boneIndex)
const;
163 const glm::quat& GetBindPoseRot(int32_t boneIndex)
const;
164 const glm::vec3& GetBindPoseScale(int32_t boneIndex)
const;
168 void GatherDescendants(int32_t rootIndex, std::vector<uint8_t>& outBitset,
bool includeRoot =
true)
const;
173 void GatherSubtreeBoneSet(
174 const std::vector<std::string>& includes,
175 const std::vector<std::string>& excludes,
177 std::vector<uint8_t>& outBitset)
const;
180 AABB GetAABB()
const;
182 const glm::mat4 GetBindPoseMatrix(int32_t boneIndex)
const;
187 static bool HandlePropChange(
Datum* datum, uint32_t index,
const void* newValue);
196 uint32_t mNumVertices;
197 uint32_t mNumIndices;
200 std::vector<Bone> mBones;
201 std::vector<Animation> mAnimations;
202 std::vector<VertexSkinned> mVertices;
203 std::vector<SkeletalMeshSection> mSections;
205 glm::mat4 mInvRootTransform;
206 std::vector<glm::mat4> mBindPoseMatrices;
209 std::vector<glm::vec3> mBindPoseDecompPos;
210 std::vector<glm::quat> mBindPoseDecompRot;
211 std::vector<glm::vec3> mBindPoseDecompScale;
212 std::vector<IndexType> mIndices;
220 float mBoundsScale = 1.1f;
227 void Create(
const aiScene& scene,
228 const aiMesh& meshData,
229 std::vector<Material>* materials =
nullptr);
231 void SetupBoneHierarchy(
233 const aiMesh& meshData,
234 std::vector<uint8_t>& boneIndices,
235 std::vector<float>& boneWeights,
236 int32_t parentBoneIndex);
238 void SetupAnimations(
const aiScene& scene);
239 void SetupResource(
const aiMesh& meshData,
240 const std::vector<float>& boneWeights,
241 const std::vector<uint8_t>& boneIndices);
243 void CreateCombined(
const aiScene& scene,
244 const std::vector<const aiMesh*>& renderMeshes);
Platform
Definition EngineTypes.h:32
uint16_t IndexType
Definition GraphicsTypes.h:122
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Bounds ComputeBounds(const std::vector< T > &vertices)
Definition Utilities.h:153
virtual bool Import(const std::string &path, ImportOptions *options=nullptr)
Definition Asset.cpp:342
virtual void Create()
Definition Asset.cpp:78
virtual void SaveStream(Stream &stream, Platform platform)
Definition Asset.cpp:334
virtual glm::vec4 GetTypeColor()
Definition Asset.cpp:352
virtual const char * GetTypeImportExt()
Definition Asset.cpp:362
virtual const char * GetTypeName()
Definition Asset.cpp:357
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Asset.cpp:347
virtual void LoadStream(Stream &stream, Platform platform)
Definition Asset.cpp:320
virtual void Destroy()
Definition Asset.cpp:93
Definition SkeletalMesh3d.h:116
Definition SkeletalMesh.h:99
DECLARE_ASSET(SkeletalMesh, Asset)
Definition EngineTypes.h:210
Definition SkeletalMesh.h:48
float mTime
Definition SkeletalMesh.h:49
glm::vec3 mValue
Definition SkeletalMesh.h:50
Definition SkeletalMesh.h:54
std::string mName
Definition SkeletalMesh.h:55
std::vector< AnimEventKey > mEventKeys
Definition SkeletalMesh.h:56
Definition SkeletalMesh.h:60
SkeletalMesh3D * mNode
Definition SkeletalMesh.h:61
float mTime
Definition SkeletalMesh.h:64
std::string mAnimation
Definition SkeletalMesh.h:63
glm::vec3 mValue
Definition SkeletalMesh.h:65
std::string mName
Definition SkeletalMesh.h:62
Definition SkeletalMesh.h:77
std::string mName
Definition SkeletalMesh.h:78
std::vector< Channel > mChannels
Definition SkeletalMesh.h:81
float mTicksPerSecond
Definition SkeletalMesh.h:80
std::vector< AnimEventTrack > mEventTracks
Definition SkeletalMesh.h:82
float mDuration
Definition SkeletalMesh.h:79
Definition SkeletalMesh.h:21
glm::mat4 mInvOffsetMatrix
Definition SkeletalMesh.h:26
glm::mat4 mOffsetMatrix
Definition SkeletalMesh.h:25
std::string mName
Definition SkeletalMesh.h:22
int32_t mIndex
Definition SkeletalMesh.h:23
int32_t mParentIndex
Definition SkeletalMesh.h:24
Definition EngineTypes.h:201
Definition SkeletalMesh.h:69
std::vector< ScaleKey > mScaleKeys
Definition SkeletalMesh.h:73
int32_t mBoneIndex
Definition SkeletalMesh.h:70
std::vector< PositionKey > mPositionKeys
Definition SkeletalMesh.h:71
std::vector< RotationKey > mRotationKeys
Definition SkeletalMesh.h:72
Definition SkeletalMesh.h:30
glm::vec3 mValue
Definition SkeletalMesh.h:32
float mTime
Definition SkeletalMesh.h:31
Definition SkeletalMesh.h:36
glm::quat mValue
Definition SkeletalMesh.h:38
float mTime
Definition SkeletalMesh.h:37
Definition SkeletalMesh.h:42
float mTime
Definition SkeletalMesh.h:43
glm::vec3 mValue
Definition SkeletalMesh.h:44
Definition GraphicsTypes.h:198
Definition SkeletalMesh.h:89
std::string mName
Definition SkeletalMesh.h:90
MaterialRef mMaterial
Definition SkeletalMesh.h:95
uint32_t mBaseVertex
Definition SkeletalMesh.h:93
uint32_t mVertexCount
Definition SkeletalMesh.h:94
uint32_t mIndexCount
Definition SkeletalMesh.h:92
uint32_t mFirstIndex
Definition SkeletalMesh.h:91