Direct3D入门-向量和距阵变换

上传人:野鹰 文档编号:1090565 上传时间:2017-05-27 格式:TXT 页数:9 大小:13.33KB
返回 下载 相关 举报
Direct3D入门-向量和距阵变换_第1页
第1页 / 共9页
Direct3D入门-向量和距阵变换_第2页
第2页 / 共9页
Direct3D入门-向量和距阵变换_第3页
第3页 / 共9页
Direct3D入门-向量和距阵变换_第4页
第4页 / 共9页
Direct3D入门-向量和距阵变换_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《Direct3D入门-向量和距阵变换》由会员分享,可在线阅读,更多相关《Direct3D入门-向量和距阵变换(9页珍藏版)》请在金锄头文库上搜索。

1、Direct3D入门-向量和距阵变换DirectX 2010-01-25 16:39 阅读0 评论0 字号: 大大 中中 小小 向量(也叫矢量,英文叫vector)向量就是包含大小(长度)和方向的一个量。向量有2维的,也有3维甚至4维的。在DX的所有结构体中,有一个结构体是用来表示3维向量的,它就是D3DVECTOR,这个结构体很简单,只有三个成员:x、y、z。一般来说,如果不涉及到向量运算的话,用这个结构体来定义一个向量就可以了。我们可以它来表示方向以及顶点在3D世界中的位置等。如果你要对那些向量进行一些运算的话,使用D3DVECTOR就很不方便了,因为在D3DVECTOR这个结构体中没有重

2、载任何的运算符,如果想要做一个加法运算,就得分别对结构体中的每一个成员进行运算了。嘿嘿,不用怕,在DX里面有个叫D3DX的东东(包含d3dx.h头文件),它里面定义了很多方便我们进行数学计算的函数和结构。其中就有D3DXVECTOR2,D3DXVECTOR3,D3DXVECTOR4这三个结构体。看它们的 字就 它们的 用了 。对 2维和4维的结构体这里就不 了,其 它们也很简单,和D3DXVECTOR3 不多。不 要说 一点的是D3DXVECTOR3是 D3DVECTOR 来的,说 它和D3DVECTOR一 ,有x、y、z这三个成员, ,D3DXVECTOR3 重载了小 分算 运算符,这 我们

3、就可以 对 那 对D3DXVECTOR3的对 进行加 以及 是等的运算了。, D3DXVECTOR3是 D3DVECTOR 来的,所以的对 可以currency1“,在这 中便fi换。是简单说一fl向量的数学运算 。矢量的加 法很简单,就是分别 个向量的个分量 加 运算。向量的 法也很简单,它只对一个数“进行 法,运算的结果就是向量中的个分量分别对那个数“进行 法得的结果。向量的 就是向量的长度,就是个分量的方的和的方。向量的”就是使得向量的 为1,这对在3D世界中 是很有用的。对 向量的运算, 有个 法,那就是点 和了。点 的结果就是个向量的 ,这个向量的的“ 。说是个向量的个分量分别 的结

4、果的和。很 ,点 的结果就是一个数,这个数对我们分这个向量的点很有 。如果点 的结果为0,那这个向量currency1 如果结果大 0,那这个向量的小 90度 如果结果小 0,那这个向量的大 90度。对 ,它的运算 头 ,我就不说了,大 看fl面的 /v3 = v1 X v2v3.x = v1.y*v2.z v1.z*v2.yv3.y = v1.z*v2.x v1.x*v2.zv3.z = v1.x*v2.y v1.y*v2.x是不是很 ,如果 不了就算了。其 我们要 是要 的 义。和点 的结果不一 ,的结果是一个的向量,这个的向量 来个向量 ,至 它的方向 ,不 大 是 得 定。来,你的 ,

5、 一个向量(v1) 向 个向量(v2) 你的,这你的 所向的方向就是向量(v3)的方向了。 ,我们很 就得到 个面(个向量 定的)的法了。 了 面的文字, 数学 题可真是费劲, 又不愿 画图,辛苦大 了。如果你觉得 面的文字很枯燥,那也没关系。因为 面的不是重点,fl面介绍的函数才是希望大 要 住的。D3DX中有很多很有用的函数,它们可以 我们 面所 的所有运算。不 fl面我只说和D3DXVECTOR3有关的函数:计算点 :FLOAT D3DXVec3Dot(CONST D3DXVECTOR3* pV1,CONST D3DXVECTOR3* pV2)计算 :D3DXVECTOR3* D3DXV

6、ec3Cross(D3DXVECTOR3* pOut,CONST D3DXVECTOR3* pV1,CONST D3DXVECTOR3* pV2)计算 :FLOAT D3DXVec3Length(CONST D3DXVECTOR3* pV)”向量:D3DXVECTOR3* D3DXVec3Normalize(D3DXVECTOR3* pOut,CONST D3DXVECTOR3 pV)对 D3DXVECTOR3的加 运算, 面已经 了,用+ - * / 就行了。矩阵矩阵运算什是矩阵?这个概念 真不好解释,不 学 性代数的 肯定 矩阵长什 ,那我在这里就不解释了。在D3D中,定义矩阵的结构体是D

7、3DMATRIX:typedef struct _D3DMATRIX union struct float _11, _12, _13, _14;float _21, _22, _23, _24;float _31, _32, _33, _34;float _41, _42, _43, _44;float m44; D3DMATRIX;看这个结构的 子,你就 很清楚怎使用它来定义一个矩阵了 。在这里我顺便说一flC+中union的性 。 面定义的结构体所示,在union里面有个 分,一个是结构体,另一个是 维数组,它有16个元素。在union中,所有的成员 是共用一个内存块的,这是什 思呢?继

8、续看 面的代码,结构体中的成员_11和成员m数组的 一个元素是共用一个内存空间,即它们的“是一 的,你对_11“的也对m00进行了“,_11和m00的“是一 的。这 有什好处呢?比如你定义了一个矩阵变量D3DMATRIX mat;你想访 矩阵中 三行 四列的元素,可以这 做:mat._34 另 也可以这:mat.m23(数组是 位置0始储存的哦)。看起来使用比较麻烦,不 当你 中括号里面的数换成i和j,使用mat.mij来访 矩阵中的元素,你就 它的好处了 。际 接使用D3DMATRIX的情况不多,因为在D3DX中有个更好的结构体,那就是D3DXMATRIX。和D3DXVECTOR3似,D3D

9、XMATRIX是 D3DMATRIX继承 来的,它重载了很多运算符,使得矩阵的运算很简单。矩阵的运算方法我不打算多说了,fl面只介绍和矩阵性质有关的三个函数。产 一个单位矩阵:D3DXMATRIX *D3DXMatrixIdentity(D3DXMATRIX *pout);/返回结果求fi置矩阵:D3DXMATRIX *D3DXMatrixTranspose(D3DXMATRIX *pOut,/返回的结果CONST D3DXMATRIX *pM );/目矩阵求逆矩阵:D3DXMATRIX *D3DXMatrixInverse(D3DXMATRIX *pOut,/返回的结果FLOAT *pDet

10、erminant,/设为0CONST D3DXMATRIX *pM );/目矩阵至 什是单位矩阵,什是fi置矩阵,什是逆矩阵我就不说了,可以看一fl性代数的书,一看就 白了。简单的加 法可以使用D3DXMATRIX结构体里面重载的运算符。个矩阵 也可以用函数来 ,这将在接fl来的矩阵变换中 到。矩阵变换矩阵的基本变换有三:移,旋fi和缩放。移:D3DXMATRIX *D3DXMatrixTranslation(D3DXMATRIX* pOut,/返回的结果FLOAT x, /X轴 的移量FLOAT y, /Y轴 的移量FLOAT z) /Z轴 的移量绕X轴旋fi:D3DXMATRIX *D3D

11、XMatrixRotationX(D3DXMATRIX* pOut, /返回的结果FLOAT Angle /旋fi的弧度);绕Y轴旋fi:D3DXMATRIX *D3DXMatrixRotationY(D3DXMATRIX* pOut, /返回的结果FLOAT Angle /旋fi的弧度);绕Z轴旋fi:D3DXMATRIX *D3DXMatrixRotationZ(D3DXMATRIX* pOut, /返回的结果FLOAT Angle /旋fi的弧度);绕 定轴旋fi:D3DXMATRIX *D3DXMatrixRotationAxis(D3DXMATRIX *pOut,/返回的结果CONS

12、T D3DXVECTOR3 *pV,/ 定轴的向量FLOAT Angle/旋fi的弧度);缩放:D3DXMATRIX *D3DXMatrixScaling(D3DXMATRIX* pOut, /返回的结果FLOAT sx, /X轴 缩放的量FLOAT sy, /Y轴 缩放的量FLOAT sz /Z轴 缩放的量);好了,这章就这一些东西。如果你觉得好 没学到什的话,可是因为不 面的 识有什用。fl一章我将介绍世界空间、视图空间(也叫摄 机空间)以及投影,这三对 的是世界矩阵、视图矩阵和投影矩阵。搞清楚这三个空间的 用,我们就可以利用这章的 识使我们的3D世界动起来了。无论计算机图形技 如何发展,

13、只要它以 维的屏幕 为 示介质,那它 示的图 即使多的有立体感,也 是 维的。有我会想,有没有以 个空间 为 示介质的的可呢,不 即使有,也只是 示 个范围内的图 ,不可有无限大的空间 为 示介质,如果有,那就是 世界了。既 示器的屏幕是 维的,那我们就要对图 些处理,让它可以欺骗我们的 ,产 一立体的真 感。在D3D中,这处理就是一系列的空间变换, 空间变到世界空间,变到视图空间, 投影到我们的 示器屏幕 。世界空间世界矩阵什是 空间呢?每个 (3D 体) 有它 的空间,空间的中 ( 点)就是 的中 。在空间里,只有 的不点有位置的对关系。那什是世界空间呢?世界就是 体( )所存在的方。当我

14、们 一个 放进世界里面 ,那它就有了一个世界 ,这个世界 是用来 世界中不的 所处的位置的。在世界空间里,世界的中 就是 点(0, 0, 0),也就是你 示器屏幕中间的那一点。我们可以在世界空间里 放很多个 , 设置它们在世界空间中的 ,这 间就有了对的位置。世界矩阵有什用呢?我们可以利用它来 变世界空间的 。这 ,在世界空间里面的 就可以移动、旋fi和缩放了。我们可以使用 一章 所 的那 个函数来产 世界矩阵。 如产 一个绕X轴旋fi的fi阵:D3DXMatrixRotationX(&matrix,1)。利用matrix这个矩阵,就可以使世界空间中的 体绕X轴fi动1弧度。可以结 面的 子来

15、理解世界矩阵。视图空间视图矩阵世界空间 立起来,我们不一定看到 ,因为我们 没有 。在视图空间里,我们可以 立我们在三维空间中的 :摄 机。我们就是 这个 的摄 机来 世界空间中的 的。所以视图空间也叫摄 机空间。要 立起这个 的摄 机,我们 要一个视图矩阵,产 视图矩阵的一个函数是:D3DXMATRIX *D3DXMatrixLookAtLH(D3DXMATRIX* pOut,CONST D3DXVECTOR3* pEye,CONST D3DXVECTOR3* pAt,CONST D3DXVECTOR3* pUp);pOut:返回的视图矩阵 pEye:设置摄 机的位置pAt:设置摄 机的 点pUp:设置方向 这个函数的 LH是表示 系的 思, 的你一定 肯定有个叫D3DXMatrixLookAtRH的函数。至 系和 系的 别,这里就不多说了, 住 系中的Z 方向是 向 示器里面的就行了。只 了视图矩阵的含义, 立视图矩阵成可以不函数, 动成。视

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号