游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1866|回复: 2

SkinMesh中Frame transformation matrix 和 mesh里boneoffset matrix 有什

[复制链接]

8

主题

20

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2006-1-4 10:20:00 | 显示全部楼层 |阅读模式
小弟我最近研究skinmesh,被几个问题搞的浇头烂额!
发现在读取frame时,frame有一个orignal matrix
在读取mesh时,与此mesh相关联的每一个bone都有一个offset matrix,
这两个matrix有什么不同?
还有mesh的顶点坐标是基于什么空间,使整个骨骼空间还是单块骨骼??

希望大虾指点,谢谢!!!

8

主题

30

帖子

36

积分

注册会员

Rank: 2

积分
36
发表于 2006-1-4 13:46:00 | 显示全部楼层

Re:SkinMesh中Frame transformation matrix 和 mesh里boneoffset matrix 有

这个orignal matrix是每块骨骼的原始矩阵(表示骨骼的位置、旋转等状态,也可说是默认矩阵),在我的代码里只是对某块骨骼blend时才使用到了它。offset matrix是每块骨骼的偏移矩阵(相对于模型原点)。只有先将每块骨骼移到模型原点再对每块骨骼进行旋转、缩放、平移才正确。动换更新是:offset matrix × 每块骨骼的动画矩阵。一般来说.x文件的mesh里只有一个mesh,包含着所有的骨骼。
具体可看《Advanced.Animation.with.DirectX》一书。

35

主题

161

帖子

161

积分

注册会员

Rank: 2

积分
161
发表于 2006-1-10 18:17:00 | 显示全部楼层

Re:SkinMesh中Frame transformation matrix 和 mesh里boneoffset matrix 有

frame里的orginal matrix是相对与父frame的变换矩阵
bone的offset matrix是将定点变换到该bone空间的矩阵,也就是说是相对于bone的
mesh本身的顶点坐标使用的是mesh的本地坐标,相对于mesh的原点

做skinning时,对于每块bone,要先计算使用该bone将mesh中受其影响顶点从mesh本地坐标transform到骨骼体系空间的矩阵(即相对于root frame)
update mesh matrix = bone offset matrix * frame transform matrix
这里的frame transform matrix当不使用动画时就等于一串original matrix相串联的矩阵(从子到父到根),当用动画时,是关键帧插值得到的。(一般情况下original matrix基本没用)

得到update mesh matrix后,在dx8中,直接将它传给updateSkinnedMesh,用软件方法计算mesh顶点的新位置。如果用硬件的vertex blending,就调用几次transform就可以了,让硬件替你按照skin weight插值。

-----------
skinned mesh里面东西多且散乱,有时间自己整理下:)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 05:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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