diff --git a/components/sceneutil/riggeometry.hpp b/components/sceneutil/riggeometry.hpp index e99bc757e2..70f2c6e7db 100644 --- a/components/sceneutil/riggeometry.hpp +++ b/components/sceneutil/riggeometry.hpp @@ -10,6 +10,9 @@ namespace SceneUtil class Skeleton; class Bone; + /// @brief Mesh skinning implementation. + /// @note A RigGeometry may be attached directly to a Skeleton, or somewhere below a Skeleton. + /// Note though that the RigGeometry ignores any transforms below the Skeleton, so the attachment point is not that important. class RigGeometry : public osg::Geometry { public: @@ -25,7 +28,6 @@ namespace SceneUtil std::map mWeights; }; - struct InfluenceMap : public osg::Referenced { std::map mMap; diff --git a/components/sceneutil/skeleton.hpp b/components/sceneutil/skeleton.hpp index c241844f11..acb9e61363 100644 --- a/components/sceneutil/skeleton.hpp +++ b/components/sceneutil/skeleton.hpp @@ -8,8 +8,8 @@ namespace SceneUtil { - // Defines a Bone hierarchy, used for updating of skeleton-space bone matrices. - // To prevent unnecessary updates, only bones that are used for skinning will be added to this hierarchy. + /// @brief Defines a Bone hierarchy, used for updating of skeleton-space bone matrices. + /// @note To prevent unnecessary updates, only bones that are used for skinning will be added to this hierarchy. class Bone { public: @@ -22,6 +22,7 @@ namespace SceneUtil std::vector mChildren; + /// Update the skeleton-space matrix of this bone and all its children. void update(const osg::Matrixf* parentMatrixInSkeletonSpace); private: @@ -29,16 +30,21 @@ namespace SceneUtil void operator=(const Bone&); }; + /// @brief Handles the bone matrices for any number of child RigGeometries. + /// @par Bones should be created as osg::MatrixTransform children of the skeleton. + /// To be a referenced by a RigGeometry, a bone needs to have a unique name. class Skeleton : public osg::Group { public: Skeleton(); Skeleton(const Skeleton& copy, const osg::CopyOp& copyop); - Bone* getBone(const std::string& name); - META_Node(NifOsg, Skeleton) + /// Retrieve a bone by name. + Bone* getBone(const std::string& name); + + /// Request an update of bone matrices. May be a no-op if already updated in this frame. void updateBoneMatrices(osg::NodeVisitor* nv); private: