一。了解骨骼结构(Skeletal Structures)和骨层级(Bone Hierarchies)
代码如下:
骨骼从本质上来说应该是一个n叉树形结构。
FrameRoot->Frame1->frame10
frame11
frame12
...
Frame2
...
Frame3
...
然后为了简化处理:
利用变换将 n 叉树转换为2叉树:
变换后为:
FrameRoot->Frame1->childframe10
| frame12
| ...
BrotherFrame2
|
| ...
BrotherFrame3
...
也就是下面这个理论:
一个父骨仅仅有一个子骨和一个兄弟骨。
下面这个问题是如何给骨骼定位:
骨骼的位置是由它的变换矩阵(相对于初始位置)决定的:
而mesh决定了它的顶点坐标。
模型:
class 骨骼{
矩阵(4X4) 变换矩阵
网格点表数组(mesh)
};
因此有下面这个模板:
template Frame
{
< 3D82AB46-62DA-11cf-AB39-0020AF71E433 >
FrameTransformMatrix frameTransformMatrix; // 骨骼相对于节点的坐标变换矩阵,就是一个matrix
Mesh mesh; // 骨骼的Mesh
}
它的抽象层级很高.
给骨架下了这么个定义:
1.有网格点 mesh
2.能进行变换
骨骼是有了,可是没有显示出它与其他骨骼的关系啊?
问题是“骨架”在哪里?
上面说过,骨架就是一个二叉树(由n叉树变换过来)
class 骨架{
骨架名称 name; // 骨骼名称
骨架* pFrameSibling;//指向兄弟
骨架* pFrameFirstChild;//指向第一个孩子
骨骼 Frame;//本节点骨骼数据
}
下面考虑如何实现的问题:
一个人体是一个骨架:
腰盘骨 -----》根骨
头骨-------》第一子骨
胸骨------》第一子骨的兄弟骨1
两个胳臂骨--》第一子骨的兄弟骨2
两个大腿骨-》第一子骨的兄弟骨3
首先:
所有的骨头通过各种变换安装到了人的骨架之上。
所以:
怎么装上去的呢?
在.X文件中,专门保存了这么个矩阵:
D3DXMATRIX matOriginal; // 从X文件加载的原始变换矩阵
这个矩阵定位了骨骼的原始位置。
以后,所有的变换都要从它开始。
幸运的是,骨骼的模板中(上面的Frame)已经有了个变换矩阵:
FrameTransformMatrix frameTransformMatrix;
它表示一个目前将要发生的变换。
而下面这个东西是累计变换矩阵:
D3DXMATRIX matCombined; // 组合变换矩阵,用于储存变换的骨骼矩阵
mathCombined
下面这个结构体让骨骼能够随意扭动,飞奔!!!
struct D3DXFRAME_EX : D3DXFRAME
{
D3DXMATRIX matCombined; // 组合变换矩阵,用于储存变换的骨骼矩阵
D3DXMATRIX matOriginal; // 从X文件加载的原始变换矩阵
D3DXFRAME_EX()
{
Name = NULL;
pMeshContainer = NULL;
pFrameSibling = pFrameFirstChild = NULL;
D3DXMatrixIdentity(&matCombined);
D3DXMatrixIdentity(&matOriginal);
D3DXMatrixIdentity(&TransformationMatrix);
}
~D3DXFRAME_EX()
{
delete [] Name; Name = NULL;
delete pFrameSibling; pFrameSibling = NULL;
delete pFrameFirstChild; pFrameFirstChild = NULL;
}
}
到这里,应该都很清楚了哈。至于如何便利骨架。二叉树么,如何读取模型文件,.X文件,
很简单了。。
不说了。。
动画呢?
如何实现呢?关键帧技术?矩阵插值?
定义帧:(关键帧跟帧一样)
class 帧
{
骨架 骨架//骨架
Time time;//时间
}
根据time,对骨架的Matrix 线性插值就可以了,插值很复杂啊啊啊 啊 啊!!!不说了
下面是动画:
animation
class 骨骼动画
{
//渲染某一帧:
GetTimeFrame(temptime,关键帧original,关键帧terminal);
//播放
replay(time1,time2)
{
for(time=time1,time=time+间隔,time<time2){
Frame f=GetTimeFrame(temptime,关键帧original,关键帧terminal);
render(f);
}
}
}
结束了。哈哈简单吧。。。希望有人能把,根据time,对骨架的Matrix 线性插值就可以了,插值很复杂的算法给我。。。谢谢了哈
wa505@126.com
分享到:
相关推荐
标准人体血管3D模型适用于人体模型设计
人体穴位3D模型,可以查看人体经络及穴位
3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马3D模型马...
一款人体穴位3D模型软件,这是一款显示三维人体的穴位软件,其中包括12正经全部309个穴位,傻瓜操作,容易上手,形态逼真,对中医或者人体穴位有兴趣的朋友
人体内脏3d模型 3Dmax 十分精细的3d人体模型,Turbosquid3 DHumanMale Female Complete Anatomy
很牛的web动态3D人体模型,根据人体走路的特征进行数据分析。官方网址:http://www.biomotionlab.ca/Demos/webgl_walker/
ms3d模型ms3d模型ms3d模型ms3d模型ms3d模型ms3d模型ms3d模型
大型会议室3d模型大型会议室3d模型大型会议室3d模型大型会议室3d模型大型会议室3d模型大型会议室3d模型大型会议室3d模型大型会议室3d模型大型会议室3d模型大型会议室3d模型大型会议室3d模型大型会议室3d模型大型会议...
obj格式人体3D模型,内含obj格式,mtl格式,tga格式文件
舵机3d模型大全,欢迎下载舵机3d模型大全,欢迎下载舵机3d模型大全,欢迎下载舵机3d模型大全,欢迎下载舵机3d模型大全,欢迎下载舵机3d模型大全,欢迎下载舵机3d模型大全,欢迎下载舵机3d模型大全,欢迎下载舵机3d...
3d模型3d模型3d模型3d模型3d模型
3d人体骨骼模型下载5款 ,3D模型下载,3D模型库下载
3D模型-桌子3D模型-桌子3D模型-桌子3D模型3D模型-桌子3D模型-桌子3D模型-桌子3D模型3D模型-桌子3D模型-桌子3D模型-桌子3D模型
人体内脏3d模型 3Dmax 十分精细的3d人体模型 Turbosquid 3D Human Male & Female Complete Anatomy
Qt+opengl加载各种类型的3D模型,.glb .obj 等;Qt+opengl加载各种类型的3D模型,.glb .obj 等;Qt+opengl加载各种类型的3D模型,.glb .obj 等;Qt+opengl加载各种类型的3D模型,.glb .obj 等;Qt+opengl加载各种...
运动型手表3D模型适用于手表模型设计
Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt+openglEs2加载3D模型Qt...
这是个人收集的很全的AD软件3D模型库,里面有常用模型,分享给大家
1:1女性3D模型,SolidWorks2009后的版本可打开,模型尺寸参照国标GB-1988,模型个头1:1
常用的电子元器件 3D模型.rar