aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/shared/external/include/SkeletalAnim.h
diff options
context:
space:
mode:
authorgit perforce import user <a@b>2016-10-25 12:29:14 -0600
committerSheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees>2016-10-25 18:56:37 -0500
commit3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch)
treefa6485c169e50d7415a651bf838f5bcd0fd3bfbd /APEX_1.4/shared/external/include/SkeletalAnim.h
downloadphysx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz
physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip
Initial commit:
PhysX 3.4.0 Update @ 21294896 APEX 1.4.0 Update @ 21275617 [CL 21300167]
Diffstat (limited to 'APEX_1.4/shared/external/include/SkeletalAnim.h')
-rw-r--r--APEX_1.4/shared/external/include/SkeletalAnim.h229
1 files changed, 229 insertions, 0 deletions
diff --git a/APEX_1.4/shared/external/include/SkeletalAnim.h b/APEX_1.4/shared/external/include/SkeletalAnim.h
new file mode 100644
index 00000000..3942e242
--- /dev/null
+++ b/APEX_1.4/shared/external/include/SkeletalAnim.h
@@ -0,0 +1,229 @@
+/*
+ * Copyright (c) 2008-2015, NVIDIA CORPORATION. All rights reserved.
+ *
+ * NVIDIA CORPORATION and its licensors retain all intellectual property
+ * and proprietary rights in and to this software, related documentation
+ * and any modifications thereto. Any use, reproduction, disclosure or
+ * distribution of this software and related documentation without an express
+ * license agreement from NVIDIA CORPORATION is strictly prohibited.
+ */
+
+#ifndef SKELETAL_ANIM
+#define SKELETAL_ANIM
+
+#include <PsFastXml.h>
+#include <vector>
+#include "TriangleMesh.h"
+
+#include "ApexDefs.h"
+
+namespace MESHIMPORT
+{
+};
+
+namespace nvidia
+{
+namespace apex
+{
+class RenderDebugInterface;
+class RenderMeshAssetAuthoring;
+}
+}
+
+namespace mimp
+{
+ class MeshSystemContainer;
+};
+
+namespace Samples
+{
+
+class TriangleMesh;
+
+// ---------------------------------------------------------------------------
+struct SkeletalBone
+{
+ void clear();
+
+ std::string name;
+ int id;
+ physx::PxTransform pose;
+ physx::PxVec3 scale;
+ int parent;
+ int firstChild;
+ int numChildren;
+ int firstVertex;
+
+ physx::PxMat44 bindWorldPose;
+ physx::PxMat44 invBindWorldPose;
+ physx::PxMat44 currentWorldPose;
+ int boneOption;
+ float inflateConvex;
+ float minimalBoneWeight;
+ int numShapes;
+ bool selected;
+ bool isRoot; // this is used for localspace sim
+ bool isRootLock; // this is used to lock the translation of the rootbone
+ bool allowPrimitives;
+ bool dirtyParams;
+ bool manualShapes;
+};
+
+struct BoneKeyFrame
+{
+ void clear();
+ physx::PxTransform relPose;
+ float time;
+ physx::PxVec3 scale;
+};
+
+struct BoneTrack
+{
+ void clear();
+ int firstFrame;
+ int numFrames;
+};
+
+struct SkeletalAnimation
+{
+ void clear();
+ std::string name;
+ std::vector<BoneTrack> mBoneTracks;
+ float minTime;
+ float maxTime;
+};
+
+// ---------------------------------------------------------------------------
+class SkeletalAnim : public physx::shdfnd::FastXml::Callback
+{
+public:
+ SkeletalAnim();
+ virtual ~SkeletalAnim();
+
+ void clear();
+ void copyFrom(const SkeletalAnim& anim);
+
+ bool loadFromXML(const std::string& xmlFile, std::string& error);
+ bool saveToXML(const std::string& xmlFile) const;
+ bool loadFromParent(const SkeletalAnim* parent);
+ bool loadFromMeshImport(mimp::MeshSystemContainer* msc, std::string& error, bool onlyAddAnimation);
+ bool saveToMeshImport(mimp::MeshSystemContainer* msc);
+ bool initFrom(nvidia::apex::RenderMeshAssetAuthoring& rma);
+
+ void setBindPose();
+ void setAnimPose(int animNr, float time, bool lockRootbone = false);
+ const std::vector<SkeletalBone> &getBones() const
+ {
+ return mBones;
+ }
+ void setBoneCollision(uint32_t boneNr, int option);
+ void setBoneSelected(uint32_t boneNr, bool selected)
+ {
+ mBones[boneNr].selected = selected;
+ }
+ void setBoneRoot(uint32_t boneNr, bool isRoot)
+ {
+ mBones[boneNr].isRoot = isRoot;
+ }
+ void setBoneAllowPrimitives(uint32_t boneNr, bool on)
+ {
+ mBones[boneNr].dirtyParams |= mBones[boneNr].allowPrimitives != on;
+ mBones[boneNr].allowPrimitives = on;
+ }
+ void setBoneInflation(uint32_t boneNr, float value)
+ {
+ mBones[boneNr].inflateConvex = value;
+ }
+ void setBoneMinimalWeight(uint32_t boneNr, float value)
+ {
+ mBones[boneNr].dirtyParams |= mBones[boneNr].minimalBoneWeight != value;
+ mBones[boneNr].minimalBoneWeight = value;
+ }
+ void setBoneDirty(uint32_t boneNr, bool on)
+ {
+ mBones[boneNr].dirtyParams = on;
+ }
+ void setBoneManualShapes(uint32_t boneNr, bool on)
+ {
+ mBones[boneNr].manualShapes = on;
+ }
+ const std::vector<int> &getChildren() const
+ {
+ return mChildren;
+ }
+ const std::vector<physx::PxMat44>& getSkinningMatrices() const
+ {
+ return mSkinningMatrices;
+ }
+ const std::vector<physx::PxMat44>& getSkinningMatricesWorld() const
+ {
+ return mSkinningMatricesWorld;
+ }
+ const std::vector<SkeletalAnimation*> &getAnimations() const
+ {
+ if (mParent != NULL)
+ {
+ return mParent->getAnimations();
+ }
+ return mAnimations;
+ }
+
+ void draw(nvidia::RenderDebugInterface* batcher);
+
+ void clearShapeCount(int boneIndex = -1);
+ void incShapeCount(int boneIndex);
+ void decShapeCount(int boneIndex);
+
+ void setRagdoll(bool on);
+
+ virtual bool processElement(const char* elementName, const char* elementData, const physx::shdfnd::FastXml::AttributePairs& attr, int lineno);
+ virtual bool processComment(const char* comment) // encountered a comment in the XML
+ {
+ PX_UNUSED(comment);
+ return true;
+ }
+
+ virtual bool processClose(const char* element, uint32_t depth, bool& isError) // process the 'close' indicator for a previously encountered element
+ {
+ PX_UNUSED(element);
+ PX_UNUSED(depth);
+ isError = false;
+ return true;
+ }
+
+ virtual void* fastxml_malloc(uint32_t size)
+ {
+ return ::malloc(size);
+ }
+ virtual void fastxml_free(void* mem)
+ {
+ ::free(mem);
+ }
+
+private:
+ void init(bool firstTime);
+ void initBindPoses(int boneNr, const physx::PxVec3& scale);
+ void setAnimPoseRec(int animNr, int boneNr, float time, bool lockBoneTranslation);
+
+ void interpolateBonePose(int animNr, int boneNr, float time, physx::PxTransform& pose, physx::PxVec3& scale);
+ int findBone(const std::string& name);
+ void setupConnectivity();
+
+ // skeleton
+ std::vector<SkeletalBone> mBones;
+ std::vector<physx::PxMat44> mSkinningMatrices;
+ std::vector<physx::PxMat44> mSkinningMatricesWorld;
+ std::vector<int> mChildren;
+
+ // animation
+ std::vector<SkeletalAnimation*> mAnimations;
+ std::vector<BoneKeyFrame> mKeyFrames;
+
+ const SkeletalAnim* mParent;
+
+ bool ragdollMode;
+};
+
+} // namespace Samples
+
+#endif