游戏开发论坛

 找回密码
 立即注册
搜索
楼主: zzzworm

关于骨骼动画及微软示例Skinned Mesh的解析

[复制链接]

54

主题

116

帖子

122

积分

注册会员

Rank: 2

积分
122
发表于 2007-10-19 17:42:00 | 显示全部楼层

Re:关于骨骼动画及微软示例Skinned Mesh的解析

看骨骼动画时遇到的问题

在导入模型的函数D3DXLoadMeshHierarchyFromX和创建初始化一个frame的函数HRESULT CAllocateHierarchy::CreateFrame以及创建网格容器的函数HRESULT CAllocateHierarchy::CreateMeshContainer 三处设置的断点
发现是在调用了D3DXLoadMeshHierarchyFromX之后多次调用CAllocateHierarchy::CreateFrame来创建整个骨骼系统的二叉树架构
的(很多书上也是这么写的)。
可是在CAllocateHierarchy::CreateFrame函数中除了初始化了FRAME的名字之外,把用来存储frame的D3DXFRAME_DERIVE结构里的三个指针都设为空了,如下:

    pFrame->pMeshContainer = NULL;
    pFrame->pFrameSibling = NULL;
    pFrame->pFrameFirstChild = NULL;

这样怎么建立的树型结构呢,虽然在反复的调用CAllocateHierarchy::CreateFrame函数来建立骨骼,可是父亲frame和孩子frame没有联系呀(至少在指针方面没有看出来)。
   
   我想了很久,有一种不成熟的想法。函数原形HRESULT CAllocateHierarchy::CreateFrame( LPCSTR Name, LPD3DXFRAME *ppNewFrame ) 第一个参数是本次要建立的frame的名字,而第二个参数*ppNewFrame 是指向本次要建立的frame的指针(其实在函数中是作为返回值的)。我想是不是在本次调用CAllocateHierarchy::CreateFrame时把上次调用这个函数的pFrameFirstChild或pFrameSibling当做第二个参数的实参传了进来。这样本次创建并初始化的frame就是上次建立frame的孩子或者兄弟,这样就有联系的建立起来骨骼的树形结构。
   但这只是我的推测,代码中没有显式的调用这个函数并传递参数。不知道我的推测是否正确,请各位指点一二了。


谢谢

3

主题

18

帖子

23

积分

注册会员

Rank: 2

积分
23
 楼主| 发表于 2007-10-24 16:26:00 | 显示全部楼层

Re: 关于骨骼动画及微软示例Skinned Mesh的解析

楼上, 好像没你说的那么复杂.
HRESULT CAllocateHierarchy::CreateFrame( LPCSTR Name, LPD3DXFRAME *ppNewFrame )

HRESULT CAllocateHierarchy:estroyFrame(LPD3DXFRAME pFrameToFree)

这两个函数仅是CAllocateHierarchy提供的两上回调函数, 也就是给你一个机会,让你亲自创建相关的Frame对象,自己来释放. 之所以这样做,是因为LPD3DXFRAME指向的结构,有可能是你曾经做了扩展,以至D3DX没法代为new

在CreateFrame()中,以新new出来的东西进行了清零等初始化工作, 而父子指针的赋值是在此后由D3DX进行的,它自己根据X文件结构进行赋值.这个过程是在CreateFrame回调之后,你看不到的.


有两个月没来论坛了. 最近被公司安排做数据库了~~~~  好烦

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2007-10-24 22:58:00 | 显示全部楼层

Re:关于骨骼动画及微软示例Skinned Mesh的解析

搂主对骨骼动画的技术已经基本掌握了,能写出来不容易,顶一下搂主!

54

主题

116

帖子

122

积分

注册会员

Rank: 2

积分
122
发表于 2007-10-25 18:59:00 | 显示全部楼层

Re:关于骨骼动画及微软示例Skinned Mesh的解析

谢谢搂主,对我的帮助太大了

1

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2007-11-14 21:31:00 | 显示全部楼层

Re:关于骨骼动画及微软示例Skinned Mesh的解析

不错,刚好正在做骨骼动画,找到这么好的文章,谢谢楼主噢

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-1-11 13:22:00 | 显示全部楼层

Re:关于骨骼动画及微软示例Skinned Mesh的解析

楼主请问一下,我的程序每次运行就说CallocateHierarchy(继承自ID3DXAllocateHierarchy)类是抽象类不能够生成实例,但是我把该类中的虚函数都实现了(包括CreateFrame,CreateMeshContainer,DestroyFrame,DestroyMeshContainer),怎么还是出现这个问题啊。。。不知道怎么解决啊。。楼主能不能指导一下啊?谢谢!!!

15

主题

28

帖子

34

积分

注册会员

Rank: 2

积分
34
发表于 2009-3-16 12:06:00 | 显示全部楼层

Re: 关于骨骼动画及微软示例Skinned Mesh的解析

谢谢楼主的,无私奉献,
有个问题,就是动画控制器部分,他是怎么来控制动画的

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2009-3-24 02:41:00 | 显示全部楼层

Re: 关于骨骼动画及微软示例Skinned Mesh的解析

我的骨骼动画遇到了这样的问题,请问是什么原因呢

22

主题

87

帖子

87

积分

注册会员

Rank: 2

积分
87
发表于 2009-9-17 20:54:00 | 显示全部楼层

Re: 关于骨骼动画及微软示例Skinned Mesh的解析

看完楼主的帖子对我帮助很大,非常感谢楼主帮助我们这些新手
另外在tiny_4anim.x模型中我找到了一个和楼主说的稍微不一样的小地方
我在.x模型中找到了两个Mesh;
设置断点后也发现了两个不为空的pMeshContainer;

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2009-9-19 17:15:00 | 显示全部楼层

Re:关于骨骼动画及微软示例Skinned Mesh的解析

这么多人顶,俺也顶吧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 15:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表