- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章矩阵变换
第五章:矩阵变换
Introduction (序)
啊哈,新的一章又开始了!这一章我们要加深一下对矩阵的了解。正如以前提到过的,使用矩阵,你可以旋转、缩放或移动顶点(进而对整个对象也能做这些变换)。此章我们会看到怎样按照不同的方法来旋转五个立方体:绕x轴、绕y轴、绕z轴、绕自定义轴和绕所有轴。
What are matrices and how do they work? (矩阵是什么和它们怎样工作)
矩阵其实是一个高级的数学主题(参看线性代数),所以,在此我只能尽力地、简要地概括一下。矩阵就像是一个表格,有一定数目的行与列;每个格子中都一个数字或表达式。通过特定的矩阵,我们可以对3D对象中的顶点坐标进行运算,来实现类似移动、旋转、缩放这样的操作。在DirectX中,矩阵就是4X4的数表。下面的这幅图是一个矩阵的例子,这个矩阵能使一个对象(由它的所有顶点)缩放到原来的五倍。
Fig 5.1
OK,矩阵是怎样改变顶点的位置的呢?要改变一个顶点的x,y与z值,你应该把它们与某个矩阵相乘。下面的图例演示了顶点是怎样与矩阵相乘的。
Fig 5.2
这其实是一种简单的计算,你只需要将x、y和z值分别与每列上的数相乘再相加,每列上得出的数都是新顶点的一个坐标值,这在上图中是显而易见的。你可能已经注意到我们上面的图例中在当前顶点(current vertex)的z值后面还有一个“1”,那是为了给矩阵的运算提供可行性和方便性的(最好参看一下相关的数学资料)。你需要同样数表来完成矩阵变换。
所以,你只需操作矩阵就能完成这些类似旋转、缩放或移动的变幻。幸运的是,DirectX给我们提供了一些函数能方便地生成一些通常的矩阵。那末,怎样完成即缩放又旋转(复合变换)的变幻呢?嗯,首先,我们需要两个矩阵:一个用来旋转的一个用来缩放的;然后,我们把两个矩阵相乘,得出一个新的复合矩阵,即缩放又旋转的矩阵;然后利用这个新的矩阵来变幻顶点。应该注意的是,矩阵相乘并不是普通的乘法,而且,也不满足交换率:矩阵A X 矩阵B 和 矩阵B X 矩阵A是不相等的。下面的图表演示了怎样把两个矩阵相乘:
Fig 5.3
要把两个矩阵相乘,你需要把第一个矩阵的每一行和第二个矩阵的每一列都相乘。在上面的例子中,我们把第一个矩阵的第一行的每个元素与第二个矩阵的第一列的对应元素相乘,然后把得出的四个结果相加,按此方法,我们得出了新矩阵的第一行的四个元素(Column1-4),其它元素的计算方法依此类推。这可能看起来有些复杂,不过,就像上面我提到的,DirectX提供了一些矩阵操作的函数,所以不要对此太担心。
How do I use transformation matrices in DirectX?
(在DirectX中怎样使用变换矩阵)
在教程此章的例子中,我们有5个不同位置、做不同旋转的立方体。下面是我们的代码预排,让我们一步步地来:
Step 1: Create objects (第一步,创建对象)
第一件要做的事就是创建定义我们的五个立方体。我们像定义变量那样定义了五个立方体,而且修改了CGame的InitialiseGame来创建和设置它们,不过我们没有改变它们的尺寸。InitialiseGame模块现在是这样的:
bool CGame::InitialiseGame()
{
//Setup games objects here
m_pCube1 = new CCuboid(m_pD3DDevice);
m_pCube1-SetPosition(-27.0, 0.0, 0.0);
m_pCube2 = new CCuboid(m_pD3DDevice);
m_pCube2-SetPosition(-9.0, 0.0, 0.0);
m_pCube3 = new CCuboid(m_pD3DDevice);
m_pCube3-SetPosition(9.0, 0.0, 0.0);
m_pCube4 = new CCuboid(m_pD3DDevice);
m_pCube4-SetPosition(27.0, 0.0, 0.0);
m_pCube5 = new CCuboid(m_pD3DDevice);
m_pCube5-SetPosition(0.0, 15.0, 0.0);
return true;
}
下图演示了五个立方体的初始位置。我们通常可能喜欢在原点上创建它们,然后再调动它们。但是按照教程的意图,我们将像下图那样创建它们。
Fig 5.4
Step 2: Create Transformation Matrices (第二步,创建变换矩阵)
第二步是要创
您可能关注的文档
最近下载
- 医院信息网络安全培训PPT课件.pptx
- 2025年前列腺科普试题及答案.docx
- 立式叶片排渣过滤机-中国化工设备网.doc
- 20250508 北京大学DeepSeek系列06:DeepSeek私有化部署和一体机.pptx VIP
- 【7上英YL】芜湖市2024-2025学年七年级上学期期中考试英语试卷.pdf VIP
- 屋面瓦及檩条拆除安全方案.doc
- Schneider Electric施耐德Easy Altivar ATV610 变频器编程手册(中文).pdf VIP
- NB∕T34024-2024生物质成型燃料质量要求及分级.docx VIP
- STM32F1开发标准教程-教学大纲、授课计划.docx
- 新语境幼儿园教师专业能力等级与评定.pdf VIP
文档评论(0)