Direct高级动画制作 第九章 关键帧渐变动画的运用 vs2008 directx 9.0c

这篇博客介绍了在使用DirectX 9.0c进行高级动画制作时遇到的问题,特别是关于cMorphAnimationCollection类中关键帧渐变动画的解析与修正。内容包括类的修改、动画集对象的创建、关键帧数量的获取以及时间与网格名称的数据处理。通过修复,确保在VS2008环境下正确运行。
摘要由CSDN通过智能技术生成

书本的上内容,运行起来在vs2008 和 dx 9.0c上有点问题。现改正如下:

class cMorphAnimationCollection : public cXParser
{
  protected:  (只写改正的部分)
    // Parse an .X file for mass and spring data
    BOOL ParseObject(ID3DXFileData *pDataObj,
                       ID3DXFileData *pParentDataObj,
                       DWORD Depth,
                       void **Data, BOOL Reference);
};
BOOL cMorphAnimationCollection::ParseObject(                  \
                    ID3DXFileData *pDataObj,               \
                    ID3DXFileData *pParentDataObj,         \
                    DWORD Depth,                              \
                    void **Data, BOOL Reference)
{
 // const GUID *Type = GetObjectGUID(pDataObj);
  GUID Type;
  pDataObj->GetType(&Type);
  // Read in animation set data
  if(Type == MorphAnimationSet) {

    // Create and link in a cMorphAnimationSet object
    cMorphAnimationSet *AnimSet = new cMorphAnimationSet();
    AnimSet->m_Next = m_AnimationSets;
    m_AnimationSets = AnimSet;

    // Increase # of animation sets
    m_NumAnimationSets++;

    // Set the animation set's name
    AnimSet->m_Name = GetObjectName(pDataObj);

    // Get data pointer
    DWORD *Ptr = (DWORD*)GetObjectData(pDataObj, NULL);

    // Get # of keys and allocate array of keyframe objects
    AnimSet->m_NumKeys = *Ptr++;
    AnimSet->m_Keys = new cMorphAnimationKey[AnimSet->m_NumKeys];

    // Get key data - time and mesh names
    char *PtrTemp=(char*)Ptr;
    for(DWORD i=0;i<AnimSet->m_NumKeys;i++) {
      //char *t=PtrTemp;
      AnimSet->m_Keys[i].m_Time = *Ptr++;
      PtrTemp=(char*)Ptr;
     // char *g=(char*)PtrTemp;
      AnimSet->m_Keys[i].m_MeshName =strdup((char*)PtrTemp);
//      AnimSet->m_Keys[i].m_MeshName=PtrTemp;
        PtrTemp+=strlen(PtrTemp);
        Ptr+=2;//这个感觉有点牵强  但是谁如果有更好的办法  就更好了
    //  strcpy(AnimSet->m_Keys[i].m_MeshName,(char*)*Ptr++);
    }
    // Store length of animation
    AnimSet->m_Length = AnimSet->m_Keys[AnimSet->m_NumKeys-1].m_Time;
  }
  return ParseChildObjects(pDataObj, Depth, Data, Reference);
}





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值