分享
 
 
 

骨骼动画2

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

第二界矩阵

Keep in touch :zpxocivuby@126.com

目的:指导别人使用矩阵

任务:编写教程,编写代码

阅读对象:d3d入门者,c/c++熟练,windows编程熟练,VC IDE熟练

描述:

矩阵在3d游戏当中担当着十分重要的角色。虽然在某些方面不如四元数(quaternion)但是我们不得不承认矩阵是计算机图形学的基础。

下面我们就来学习一下这个东东

矩阵的概念

What are matrices and how do they work? (矩阵是什么和它们怎样工作)

矩阵其实是一个高级的数学主题(参看线性代数),所以,在此我只能尽力地、简要地概括一下。矩阵就像是一个表格,有一定数目的行与列;每个格子中都一个数字或表达式。通过特定的矩阵,我们可以对3D对象中的顶点坐标进行运算,来实现类似移动、旋转、缩放这样的操作。在DirectX中,矩阵就是4X4的数表。下面的这幅图是一个矩阵的例子,这个矩阵能使一个对象(由它的所有顶点)缩放到原来的五倍。

那么我们用它来作甚么啊?其实很简单我们仅仅用它来做变换。

首先,给出一个点a(x,y,z),它是相对于我们想象空间点o(0,0,0)的,如果相对原点改变为(1,0,0)怎么半啊?那么a点变成(x-1,y,z).

这么说吧,其实说白了矩阵就是将一个位置的点通过变换矩阵移动到另一个位置(这样才能产生动画啊!)。你不用把矩阵看的很神秘,你就把它当成一个可以让你随心所欲的变换位置的工具。

基本的矩阵操作函数有以下几种:

1. D3DXMatrixRotationX(D3DXMATRIX *out ,FLOAT Angle);//围绕x轴转动

2. D3DXMatrixRotationY(D3DXMATRIX *out ,FLOAT Angle);//围绕y轴转动

3. D3DXMatrixRotationZ(D3DXMATRIX *out ,FLOAT Angle); //围绕z轴转动

4. D3DXMatrixRotationYawPitchRoll(D3DXMATRIX *out ,FLOAT x, FLOAT y, FLOAT z)//在xyz方向上偏移x,y,z大小

5. D3DXMatrixScaling(D3DXMATRIX *out ,FLOAT x, FLOAT y, FLOAT z)//缩放比例

6. D3DXMatrixShadow(D3DXMATRIX *out , D3DXVECTOR4* pLight, D3DXPLANE *pPlane)//平面投影矩阵

7. D3DXMatrixTranslation()//建立移动矩阵

8. D3DXMatrixTransformation(D3DXMATRIX *pOut, D3DXVECTOR3 *pScalingCenter, D3DXQUATERNION *pScalingRotation, D3DXVECTOR3 *pScaling, D3DXVECTOR3 *pRotationCenter, D3DXQUATERNION *pRotation, D3DXVECTOR3 *pTranslation);

这个函数我要给大家仔细的讲一下(竖起耳朵听啊^_^)

第一个参数:D3DXMATRIX *pOut返回的转换矩阵

第二个参数: D3DXVECTOR3 *pScalingCenter 缩放的原点

第三个参数: D3DXQUATERNION * pScalingRotation 这是个四元素(什么?什么是四元素?看来这个函数介绍要花点时间了。

D3DXQUATERNION这个结构有四个内容x,y,z,w其中xyz表示一个向量,w则表示一个旋转度,该结构表示的是围着xyz向量旋转w)

第四个参数: D3DXVECTOR3 *pScaling 缩放向量(同上面两个参数联系起来那就是在pScalingCenter原点,pScaling方向上缩放|pScaling|大小,或旋转pScalingRotation)

第五个参数:旋转圆点

第六个参数:旋转的四元素

第七个参数:旋转向量

当得到你想要的转换矩阵之后,你就可以用ID3DXEffectStateManager::SetTransform()来设置你要操作的对象了,参数说明:

D3DTRANSFORMSTATETYPE State, 转换的类型,一般是D3DTS_VIEW(视点转换), D3DTS_PROJECTION(项目转换)等

D3DMATRIX *pMatrix转换矩阵

现在来看看代码吧

其他部分都一样,有两个地方需要解释一个是在setup()方法中,另一个是在Display()方法中

D3DXVECTOR3 position(0.0f, 0.0f, -5.0f);//

D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);

D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);

//以上我们定义了三个向量,这三个向量是用来建立左手观察矩阵的

D3DXMATRIX V;

D3DXMatrixLookAtLH(&V, &position, &target, &up);

建立左手观察矩阵的函数

概念讲述

左手观察矩阵

下面的两幅图演示了左手3D 迪卡尔坐标系统是怎样工作的。

Fig 2.3

Fig 2.4

为什么称为左手观察矩阵呢?这样,你将左手平放在胸前,拇指与其他指头垂直,掌心向上,你可以看到掌心的方向与图2.3的y方向是一样的食指的方向与x方向是一样的拇指的方向与z轴的方向是一样的。(你可能会问,那有左手的,就应改有右手的啊,是的有右手的,只要将图2.3中的x轴方向反过来就是了)

Device->SetTransform(D3DTS_VIEW, &V);

设置视点转换

//以下是设置项目转换矩阵

D3DXMATRIX proj;

D3DXMatrixPerspectiveFovLH(

&proj,

D3DX_PI * 0.5f, // 90 - degree

(float)Width / (float)Height,

1.0f,

1000.0f);

Device->SetTransform(D3DTS_PROJECTION, &proj);

在Display()方法中需要添加几行代码

D3DXMATRIX Ry;

//申明一个矩阵

static float y = 0.0f;

D3DXMatrixRotationY(&Ry, y);

//以y的偏移量建立y轴旋转矩阵

y += timeDelta;//还记得timeDelta时代表什么吗?对了它是当前的时间差(上次循环到这次的时间,很少啊(毫秒艾!!!))

if( y >= 6.28f )//为什么要判断大于6.28呢?2∏是一周啊∏≈3.14啊,你可以试着改变一下该值看看有什么事情发生

y = 0.0f;

Device->SetTransform(D3DTS_WORLD, &Ry);

好了讲完了,运行一下看看吧,一个四边形围着y轴在转啊!^_^

下一界我们要进入我们的正题了――骨骼动画的基本概念,我会带你一步步的进入到(母体matrix中)嘿嘿

今天又写完了一界了不知道大家看了有没有效果,或者说我的方法是不是有问题,如果你有好的建议或者意见请与我联系 zpxocivuby@126.com

申明:代码是引用Frank Luna他老人家的代码,我无意窜取他的劳动果实,只是懒得重新写代码所以拿来用一下。过后我会自己再写个比较复杂的,之所以用他老人家的代码是因为直接明了,没有那么多的类阿,模式啊什么的。代码中我会添加注释信息

附件下载地址

http://bbs.gameres.com/upload/sf_2004113092912.rar

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有