这一章讲纹理,纹理,不能顾名思义了,其实就是一张图片,我们要做的就是把这张图片贴到模型上面,从而让模型一下子生动起来,说得有文采点就是栩栩如生,这个过程就叫纹理映射(也可以叫贴图)。纹理映射有时候能产生非常神奇的效果,比如说凹凸贴图,和凹凸贴图衍生出来的法线贴图,能够让只有几百个几千个多边形的模型产生几万个,几十万个多边形的模型的效果。
接下来就要介绍怎么创建一个纹理采样器 (texture sampler) ,如何设置采样的属性,然后把一张图片(纹理)成功地贴到那个立方体上面,图片的格式可以是 TGA , JPEG , PNG , DDS ,其中像 TGA,PNG 这样的格式是支持半透明的,可以用来模拟阴影(当然只是简单地模拟)。
纹理采样器负责怎么把一张图片上的各个像素映射到模型的像素上,反过来说,就是为每个像素选取纹理像素。看似很简单,但是当显示的图片大于(或小于)要覆盖的那个面时,就得就结了,这个不能一一映射了,那得怎么做呢,这是门学问,我们可以通过设置这个纹理采样器的各个属性来达到较好的效果。
Address Mode
首先是 addressModeU 和 addressModeV 属性,这两个属性决定了当纹理坐标超出( 0 , 1 )后该怎么做。纹理坐标,顾名思义,就是在纹理上的坐标,这是我们截取纹理中的一部分是要用到的。它的范围是( 0 , 1 )。其中左下角的坐标是 (0.0 , 1.0) ,右上角的坐标是 (1.0 , 1.0)
这两个属性有下面四种可能值
Value
Meaning
WRAP
( 默认为此值)重复贴图来填充贴图区域
MIRROR
重复贴图,当遇到 UV 的边界时反向( UV 边界为 0.0 或者 1.0 )
CLAMP
用贴图的最后一行像素,重复覆盖没贴到的区域
BORDER
超过的贴图区域,用一种特殊颜色的边标记出来
Minification Filter
Minification filter, 即 minFilter 这个属性具体说明了怎么把纹理贴到一个像素比它少的模上面(这个上面有提到过),这个属性可能有下面 3 个值
Value
Meaning
POINT
用最近的那个像素
LINEAR
线性插值
ANISO