用多叉数组织骨骼结构

       上班了!好久没来汇报工作情况了。五一过的真累,但也挺开心。爸妈来上海一躺不容易,当然要好好陪着,累并快乐着!

    这两天写了个多叉树的类SkeletonTree,用来组织骨骼数据结构。骨骼数据Frame_EX的设计这是借鉴了D3D中的D3DXFRAME,左子女右兄弟是关键,还有一个指向父节点的指针。这么设计的要点是非常容易递归调用,在更新骨骼数据时很管用。哎,做什么事情之前一定要充分调查,“没有调查就没有发言权”!如果路都走错了,再强的编程能力也是弥补不了的。

class Frame_EX : public ManipulatedFrame 
{
public:
 Frame_EX();
 virtual ~Frame_EX();

public:
 Frame_EX* Find(const char* name);
 void  UpdateHierarchy(CVector3D* pos = NULL, CQuaternion* ori = NULL);
 void  Reset();

public:
 char*   m_name;
 Frame_EX*  m_pFrameSibling;
 Frame_EX*  m_pFrameFirstChild;

 CQuaternion  m_oriCombined;  //存储当前节点相对于根节点的旋转偏移四元数
 CVector3D  m_posCombined;  //存储当前节点相对于根节点的位移偏移向量

 CQuaternion  m_oriOriginal;  //保存骨骼的原始旋转四元数(相对于父节点)
 CVector3D  m_posOriginal;  //保存骨骼的原始位移向量(相对于父节点)
};

class SkeletonTree 
{
public:
 SkeletonTree();
 virtual ~SkeletonTree();
 SkeletonTree(const SkeletonTree& sTree);
 SkeletonTree& operator=( const SkeletonTree& sTree);

public:
 const Frame_EX* rootFrame() { return m_root; }

 bool empty() { return m_root == NULL; }

 void InsertSibling(Frame_EX* pInsertAfter, const char* name);
 void InsertChild(Frame_EX* pParent, const char* name);
 
 Frame_EX* Find(char *name);

 void DeleteNode(Frame_EX* pNode);

protected:
 void DeleteNodeRecursive(Frame_EX* pNode);

private:
 Frame_EX* m_root;
};
这个SkeletonTree类写的比较简单,只是应付一下当下的需要,还有很多地方可以扩展的,有待以后继续吧!把这些头文件列出,给他人一些借鉴的同时更希望得到大家的反馈,思想的交流才能碰撞出火花。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值