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;
181 const glm::mat4 GetBindPoseMatrix(int32_t boneIndex)
const;
186 static bool HandlePropChange(
Datum* datum, uint32_t index,
const void* newValue);
195 uint32_t mNumVertices;
196 uint32_t mNumIndices;
199 std::vector<Bone> mBones;
200 std::vector<Animation> mAnimations;
201 std::vector<VertexSkinned> mVertices;
202 std::vector<SkeletalMeshSection> mSections;
204 glm::mat4 mInvRootTransform;
205 std::vector<glm::mat4> mBindPoseMatrices;
208 std::vector<glm::vec3> mBindPoseDecompPos;
209 std::vector<glm::quat> mBindPoseDecompRot;
210 std::vector<glm::vec3> mBindPoseDecompScale;
211 std::vector<IndexType> mIndices;
214 float mBoundsScale = 1.1f;
221 void Create(
const aiScene& scene,
222 const aiMesh& meshData,
223 std::vector<Material>* materials =
nullptr);
225 void SetupBoneHierarchy(
227 const aiMesh& meshData,
228 std::vector<uint8_t>& boneIndices,
229 std::vector<float>& boneWeights,
230 int32_t parentBoneIndex);
232 void SetupAnimations(
const aiScene& scene);
233 void SetupResource(
const aiMesh& meshData,
234 const std::vector<float>& boneWeights,
235 const std::vector<uint8_t>& boneIndices);
237 void CreateCombined(
const aiScene& scene,
238 const std::vector<const aiMesh*>& renderMeshes);
Platform
Definition EngineTypes.h:31
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:292
virtual void Create()
Definition Asset.cpp:77
virtual void SaveStream(Stream &stream, Platform platform)
Definition Asset.cpp:284
virtual glm::vec4 GetTypeColor()
Definition Asset.cpp:302
virtual const char * GetTypeImportExt()
Definition Asset.cpp:312
virtual const char * GetTypeName()
Definition Asset.cpp:307
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Asset.cpp:297
virtual void LoadStream(Stream &stream, Platform platform)
Definition Asset.cpp:270
virtual void Destroy()
Definition Asset.cpp:92
Definition SkeletalMesh3d.h:85
Definition SkeletalMesh.h:99
DECLARE_ASSET(SkeletalMesh, Asset)
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:200
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