最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

[骨骼动画]骨骼动画的原理与实现

IT圈 admin 31浏览 0评论

2024年3月25日发(作者:苏从筠)

[骨骼动画]骨骼动画的原理与实现

篇一 : 骨骼动画的原理与实现

骨骼动画的原理与实现

2008-05-28 14:04:10 阅读176 评论0 订阅

这里的骨骼蒙皮动画特指skinnd mesh,也叫骨骼动画。首先确

定该时刻之前和之后的两个关键帧,然后按照该时刻与前后两个关键

帧时刻的时间值插值计算出该时刻该骨骼相对于父骨骼的新变换矩

阵,这个变换矩阵往往代表旋转变换,放缩变换也能接受,如果是平

移变换矩阵,很容易将Mesh四分五裂。[)

2)对于皮肤网格中的每一个顶点,计算它在世界坐标中新的

位置和朝向。首先找到影响该顶点的所有骨骼。然后计算每一骨骼对

该顶点的影响。也就时说,计算在该骨骼独立作用下顶点的新位置。

计算按照如下公式:

顶点的新位置 = 最初状态顶点的位置* 最初状态骨骼世界变

换矩阵的逆矩阵* 骨骼的新变换矩阵

然后将所有这些新位置按照每一骨骼的影响权重加权求和。注

意所有权重的和应该恰好为 1。在公式中,最初状态顶点的位置为什

么首先要与最初状态骨骼世界变矩阵的逆矩阵相乘呢?前面说过,骨

骼的新变换矩阵是相对于父骨骼变换的,另一方面这个新变换矩阵是

世界变换矩阵,它的任何变换是相对于世界坐标系原点的。因此需要

把最初状态顶点移动到相当于父骨骼节点是原点的位置上,再进行矩

阵变换。

3)根据网格模型顶点的新位置和朝向绘制角色网格。

下面我们结合具体的图形API环境来进一步介绍骨骼动画。

第一,了解骨骼结构和骨层级:

骨骼结构就是连续很多的骨头相结合,形成的骨层级。第一个

骨头叫做根骨,是形成骨骼结构的关键点。其它所有的骨骼作为孩子

骨或者兄弟骨附加在根骨之上。所谓的“骨”用一个帧对象表示。在

Directx中,用一个D3DXFRAME结构或者X文件中的Frame template

来表示帧对象。下面看一下Frame template和D3DXFRAME结构的

定义:

template Frame

{

FrameTransformMatrix frameTransformMatrix; // 骨骼相对于父

节点的坐标变换矩阵,就是一个matrix

Mesh mesh; // 骨骼的Mesh

}

typedef struct _D3DXFRAME

{

LPSTR Name; // 骨骼名称

D3DXMATRIX TransformationMatrix; // 相对与父节点的坐标

2024年3月25日发(作者:苏从筠)

[骨骼动画]骨骼动画的原理与实现

篇一 : 骨骼动画的原理与实现

骨骼动画的原理与实现

2008-05-28 14:04:10 阅读176 评论0 订阅

这里的骨骼蒙皮动画特指skinnd mesh,也叫骨骼动画。首先确

定该时刻之前和之后的两个关键帧,然后按照该时刻与前后两个关键

帧时刻的时间值插值计算出该时刻该骨骼相对于父骨骼的新变换矩

阵,这个变换矩阵往往代表旋转变换,放缩变换也能接受,如果是平

移变换矩阵,很容易将Mesh四分五裂。[)

2)对于皮肤网格中的每一个顶点,计算它在世界坐标中新的

位置和朝向。首先找到影响该顶点的所有骨骼。然后计算每一骨骼对

该顶点的影响。也就时说,计算在该骨骼独立作用下顶点的新位置。

计算按照如下公式:

顶点的新位置 = 最初状态顶点的位置* 最初状态骨骼世界变

换矩阵的逆矩阵* 骨骼的新变换矩阵

然后将所有这些新位置按照每一骨骼的影响权重加权求和。注

意所有权重的和应该恰好为 1。在公式中,最初状态顶点的位置为什

么首先要与最初状态骨骼世界变矩阵的逆矩阵相乘呢?前面说过,骨

骼的新变换矩阵是相对于父骨骼变换的,另一方面这个新变换矩阵是

世界变换矩阵,它的任何变换是相对于世界坐标系原点的。因此需要

把最初状态顶点移动到相当于父骨骼节点是原点的位置上,再进行矩

阵变换。

3)根据网格模型顶点的新位置和朝向绘制角色网格。

下面我们结合具体的图形API环境来进一步介绍骨骼动画。

第一,了解骨骼结构和骨层级:

骨骼结构就是连续很多的骨头相结合,形成的骨层级。第一个

骨头叫做根骨,是形成骨骼结构的关键点。其它所有的骨骼作为孩子

骨或者兄弟骨附加在根骨之上。所谓的“骨”用一个帧对象表示。在

Directx中,用一个D3DXFRAME结构或者X文件中的Frame template

来表示帧对象。下面看一下Frame template和D3DXFRAME结构的

定义:

template Frame

{

FrameTransformMatrix frameTransformMatrix; // 骨骼相对于父

节点的坐标变换矩阵,就是一个matrix

Mesh mesh; // 骨骼的Mesh

}

typedef struct _D3DXFRAME

{

LPSTR Name; // 骨骼名称

D3DXMATRIX TransformationMatrix; // 相对与父节点的坐标

发布评论

评论列表 (0)

  1. 暂无评论