- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.6顶点着色器阶段.docx
5.6 顶点着色器阶段在完成图元装配后,顶点将被送往顶点着色器(vertex shader)阶段。顶点着色器可以被看成是一个以顶点作为输入输出数据的函数。每个将要绘制的顶点都会通过顶点着色器推送至硬件;实际上,我们可以概念性地认为在硬件上执行了如下代码:for(UINT i = 0; i numVertices; ++i) outputVertex[i] = VertexShader(inputVertex[i]); 顶点着色器函数由我们自己编写,但是它会在GPU上运行,所以执行速度非常快。许多效果,比如变换(transformation)、光照(lighting)和置换贴图映射(displacement mapping)都是由顶点着色器来实现的。记住,在顶点着色器中,我们不仅可以访问输入的顶点数据,也可以访问在内存中的纹理和其他数据,比如变换矩阵和场景灯光。我们将会在本书中看到许多不同的顶点着色器示例;当读完本书时,读者会对顶点着色器的功能有一个全面的认识。不过,我们的第一个示例会比较简单,只是用顶点着色器实现顶点变换。在随后的小节中,我们将讲解各种常用的变换算法。5.6.1 局部空间和世界空间现在让我们来假设一个情景:你正在参与一部影片的拍摄工作,剧组要为拍摄某些特殊效果而搭建一个微缩场景。你的具体任务是搭建一座小桥。现在,你不能在场景中搭建小桥,你必须另选地点,在远离场景的地方建立工作台,制作小桥,以避免弄乱场景中的其他微缩物品。当小桥建成后,你要按照正确的位置和角度把小桥放到场景中。3D美术师在创建3D场景时也采用同样的工作方式。他们不在全局场景坐标系(worldspace,世界空间)中建立物体,而是在局部坐标系(local space,局部空间)中建立物体;局部坐标系是最常用的实用坐标系,它的原点接近于物体中心,坐标轴的方向与物体的方向对齐。在完成3D模型的制作之后,美术师会将模型放到全局场景中;通过计算局部坐标系相对于世界坐标系的原点和轴向,实现相应的坐标转换变换(参见图5.16,并回顾3.4节的内容)。将坐标从局部坐标系转换到世界坐标系的过程称为世界变换(world transform),相应的变换矩阵称为世界矩阵(world matrix)。当所有的物体都从局部空间变换到世界空间后,这些物体就会位于同一个坐标系(世界空间)中。如果你希望直接在世界空间中定义物体,那么可以使用单位世界矩阵(identity world matrix)。图 5.16 (a)物体的每个顶点都是相对于它们自己的局部坐标系来定义的。我们根据物体在场景中的位置和方向来定义每个局部坐标系相对于世界坐标系的位置和方向。然后我们执行坐标转换变换,将所有坐标转换到世界坐标系中。(b)在世界变换后,所有物体的顶点都会位于同一个世界坐标系中。根据模型自身的局部坐标系定义模型,有以下几点好处:1.简单易用。比如,在局部坐标系中,坐标系的原点通常会与物体的中心对齐,而某个主轴可能正是物体的对称轴。又如,当我们使用局部坐标系时,由于坐标系的原点与立方体的中心对齐,坐标轴垂直于立方体表面,所以可以更容易地描述立方体的顶点(参见图5.17)。图5.17 当立方体的中心位于坐标系原点且与轴对齐(axis-aligned)时,可以很容易地描述立方体的顶点。当立方体位于坐标系的任意一个位置和方向上时,就很难描述这些坐标了。所以,当我们创建模型时,总是选择一种与物体位置接近且与物体方向对齐的实用坐标系。2.物体可以在多个场景中重复使用,对物体坐标进行相对于特定场景的硬编码是毫无意义的事情。较好的做法是:在局部坐标系中存储物体坐标,通过坐标转换矩阵将物体从局部坐标系变换到世界坐标系,建立物体与场景之间的联系。3.最后,有时我们会多次绘制相同的物体,只是物体的位置、方向和大小有所不同(比如,将一棵树重绘多次形成一片森林)。在这种情况下,我们只需要一个相对于局部坐标系的单个副本,而不是多次复制物体数据,为每个实例创建一个副本。当绘制物体时,我们为每个物体指定不同的世界矩阵,改变它们在世界空间中的位置、方向和大小。这种方法叫做instancing。如3.4.3节所述,世界矩阵描述的是一个物体的局部空间相对于世界空间的原点位置和坐标轴方向,这些坐标可以存放在一个行矩阵中。设Qw = (Qx,Qy ,Qz ,1)、uw= (ux ,uy ,uz ,0)、vw= (vx ,vy ,vz ,0)、ww = (wx ,wy ,wz ,0)分别表示局部空间相对于世界空间的原点、x轴、y轴、z轴的齐次坐标,由3.4.3节可知,从局部空间到世界空间的坐标转换矩阵为:示例假设一个正方形的顶点局部坐标在(?0.5,0,?0.5)和(0.5,0,0.5)之间,将它的边长变为2,顺时针旋转45°,
文档评论(0)