第三章: 旋转的立方体.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章: 旋转的立方体.doc

第三章: 旋转的立方体 Introduction (序) 上一章,我们绘制了一个2D的三角形,很漂亮。这回呢,我们要创建我们的第一个3D对象:立方体。为了要显示它是真正的3D对象,呵呵,我们要旋转它,这样,你将会看到它的各个面。记住:所有的3D对象都是由三角形构成的(译者:神奇的三角形啊…读者:又来了),所以,我们的立方体是由12个三角形构成的(6个面,每个面需要2个三角形,二六一十二,乘法口诀,会不?)。 3D World Space (3D 世界空间) 上一章我们见到了左手3D迪卡尔坐标系统是怎样工作的,此坐标系统从现在开始将被我们应用。 DirectX的默认是左手坐标系统,以后我们就用左手坐标系统。至于左手坐标系统和右手坐标系统的差别,在此就不多说了,伸出手来就知道了。 Backface Culling (背面拣选) 什么是背面拣选?这是其实是一个很简单的概念。就是:所有的三角形面,面向我们的面将会被渲染出来(可见),否则将不被渲染(不可见,被拣选出来了)。多么简练的一句话,如果你没明白,我举个例子:假如空间中有一个正方形面(要想象成一块方形纸片),我们把正面涂成红色,背面涂成蓝色,你把它拿在手里,如果你没有弄弯它,那你始终只会看见面向你的那个面,而不会看见它背面(有透视眼者另当别论)。那么这个“背面拣选”在Direct3D中有什么用呢?假如我们创建了一个封闭的立方体(要想象成一个方纸盒),那末里面的六个面将不会被我们看见,所以,也不用被渲染。“背面拣选”将使渲染更有效率。 那么怎么知道那个面被渲染而哪个面被拣选(不渲染)呢?一切都在你定义的顶点的顺序上。下面的两幅图演示了如何定义“顺时针”的三角形。如果你定义的三角形是顺时针的,将会被渲染出来;但如果你把它翻过来,那它就变成逆时针的了,就不会被渲染出来。嗯,其实你可以指定哪个面将被拣选,顺时针或逆时针,但是DX默认是拣选逆时针的三角形。 Fig 3.1 Fig 3.2 How to make a cube (怎样创建立方体) 下面的两幅图演示了我们的立方体将被怎样创建出来。这里我们用了三个三角带:一个是顶,一个是四个连起来的面,一个是底。下面的图显示了每个三角形带及它们的顶点排列方法。顶点被排列成0到17,也会按照这个顺序被放到顶点缓冲中。还有一幅图显示了我们的立方体(Fig 3.4)。请注意图中哪些顶点重合了,还有就是除了立方体的底面之外的其它面都是顺时针的顶点排列。这是因为我们激活了上面提到的“背面拣选”。 Fig 3.3 Fig 3.4 Matrices (矩阵) 矩阵是什么呢?它其实是一个数学主题,所以,在此我只能简要地概括一下。矩阵就像是一个表格,有一定数目的行与列;每个格子中都一个数字或表达式。通过特定的矩阵,我们可以对3D对象中的顶点坐标进行运算,来实现类似移动、旋转、缩放这样的操作。详细内容请参考线性代数学。在DirectX中,矩阵都是4X4的表格。矩阵的类型有三种:World Matrix(世界矩阵)、View Matrix(视图矩阵) 和Projection Matrix(投影矩阵)。 World Matrix(世界矩阵) 你可以利用世界矩阵在3D空间(世界空间)里通过修改对象的坐标来完成它们的旋转、缩放或平移操作。所有这些操作(变换)都是关于原点(0, 0, 0)的。单一的变幻(例如平移或缩放等)可以组合起来,形成更复杂的变幻;但要注意各种变幻的顺序很重要,矩阵1X矩阵2和矩阵2X矩阵1是不同的。还有,当你完成了一项世界变幻的矩阵操作时,矩阵跟着将转变所有的顶点。要旋转两个对象,一个关于x轴,一个关于y轴,你应该先完成x轴的变幻,然后渲染第一个对象;再完成y轴的变幻,然后渲染第二个对象。 View Matrix(视图矩阵) 视图矩阵就是摄像机(或眼睛)。摄像机在世界空间中有一个位置,还有一个观察点。例如,你可以把摄像机悬置于某个对象的上面(摄像机位置),把镜头对准那个对象的中心(观察点)。你也可以指定哪面是上面,在我们下面的例子中,我们指定了y轴的正方向是上面。 Projection Matrix(投影矩阵) 投影矩阵可以被想象成摄像机的镜头,它指定了视界(field of view)和前、后裁剪平面。目前我们会在例子中保持一致的设置。 好了,第三章的源代码就在这了,又做了一些新的变化。 #include d3dx8.h LPDIRECT3D8 g_pD3D = NULL; LPDIRECT3DDEVICE8 g_pD3DDevice = NULL; LPDIRECT3DVERTEXBUFFER8 g_pVertexBuffer = NULL; // Buffer to hold vertices struct CUSTO

文档评论(0)

gshbzl + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档