使用纹理坐标生成技术高级纹理.doc

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

5.5 使用纹理坐标生成技术的高级纹理 Ryan Woodland 当 今的图形处理器可以处理越来越多的多边形,人们也开始将注意力转向使用此能力来创建并行纹理效果。很多处理器都具备了额外的多纹理能力,人们开始思索如何有效地使用这些特性。当然,手工绘制纹理是我们最为熟知的,但我们很快发现,在运行时进行纹理映射可以产生一些有趣的效果。开发者开始使用纹理坐标生成(texture coordinate generation)技术执行动画、光照、反射、折射以及凹凸贴图等等。本文讨论了几个最常见的纹理坐标生成技术。 通过矩阵来变换数据(位置、法线、纹理坐标),是大多数人最乐意使用纹理坐标生成方法的地方。这种方法很容易被采用,因为大多数3D程序员都对矩阵变换很熟,而且矩阵变换也常常可由硬件加速。本文讲述的技术都是可以用矩阵运算执行的。 5.5.1 简单纹理坐标动画 游戏常使用简单的纹理坐标旋转或平移来模拟一些简单效果,如反射,或呈现水或一些运动介质。其思想就是:一个纹理坐标可以被简单地看作一个2D点。程序员习惯用矩阵来进行点变换,因而很容易理解,可以将纹理坐标转换成3×3矩阵来进行旋转、平移或缩放。就像几何体一样,必须将同质的坐标加到s、t对才能进行转换。因而,坐标生成方法如下: (s, t, 1) * 3x3mtx = s, t 图5.5.1中的演示图是使用旋转和缩放生成的。第一幅图是未经变换的纹理;第二幅是纹理坐标旋转45°的效果;第三幅是纹理坐标平移0.5的效果。 5.5.2 纹理投影 纹理投影(texture projection)对生成很多效果都很有用。它最常用于模拟如聚光灯或阴影的灯光效果。纹理投影的结果很直接:纹理从空间中的某个点投影到一些几何体上。例如,可以在场景中某点定义一个聚光灯,投影一个纹理(如圆形光)在几何体上,产生了聚光灯的照明效果。 再次重申,纹理投影的思想源于常规3D几何技术。当模拟摄像机时, 投影矩阵用于在摄像机空间投影顶点到摄像机的近裁剪面上。这些点的X和Y都映射到范围? 1~1中,并且它们将通过视点变换转换到屏幕空间中(通常用到平移和缩放变换)。 图5.5.1 对于纹理投影,我们通常在空间中对光建模,而不是对摄像机建模。光空间的顶点投影到光的近裁剪面上,其X和Y值被用作S和T值,将纹理映射到投影几何体上。 对光建模和对摄像机建模一样。近裁剪面应该设定成反射投影纹理的形状。例如,方形的近裁剪面应该用于投影方形纹理。 正如所提到的,被投影在纹理上的几何体应该在光空间中,就如投影在屏幕上的几何体需要在摄像机空间中一样。要做到这一点,首先需要将几何体变换到世界空间中。然后,光矩阵(就如摄像机矩阵)必须转换该几何体。之后,几何体就可以通过光的投影矩阵投影了。 一旦几何体被投影,另一个问题就会产生。如前所述,投影几何体的X和Y都将落在? 1~1的范围中,原点(0, 0)为投影面相对光源的中心。纹理坐标的S和T通常都在0~1范围中,原点为纹理的左上角。要将投影坐标映射到纹理空间中,需要先以0.5的比例进行缩放,使取值范围变为? 0.5~0.5;然后再平移0.5,使范围变为0~1。 这些矩阵可以集中在一起形成一个给定几何体的最终的投影矩阵。顺序如下: M_obj * M_light * M_proj * M_scale * M_trans * {x, y, 0, z} = {s, t, r, q} 其中: ? M_obj = 对象的世界空间矩阵 ? M_ligh = t用于将几何体从世界空间转换到光空间的光矩阵 ? M_proj = 光的投影矩阵 ? M_scale = 以0.5的比例缩放矩阵 ? M_trans = 平移0.5的矩阵 这个计算的结果是一个四维点。对于简单的纹理投影,r坐标应该忽略,应该输出(s, t, q)三元组。如果硬件允许,可直接将这三个坐标传给光栅化处理。q坐标用于执行透视矫正,只有在光栅化时执行才是正确的。 图5.5.2是使用纹理投影生成的。它展示了光的截面体,在球体上投影出了高光的圆。 以这种方式投影几何体,会产生一些意外的结果。首先,纹理坐标通常都是以平铺的方式使用的,这意味着范围是0~1的坐标与范围是? 1~0的坐标之间没有区别。然而投影在几何体上的纹理则常常有限定范围,在该纹理边缘之外的应该为坐标小于0或大于1的任意纹理。因此,纹理边缘应该进行上色,以使得选择的纹理结合模式能够产生正确的效果。 图5.5.2 纹理投影示例 第二个问题更复杂,我把它叫做“照透(shine-through)”。例如,当我们投影纹理在球上时,球对着光的正、背两个面都出现纹理。这是因为球正面和背面上的顶点都投影在正确的纹理空间中。 图5.5.3展示了这个问题

文档评论(0)

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

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

1亿VIP精品文档

相关文档