纹理技术是一种允许我们为三角形赋予图像数据的技术。例如,我们能够常见一个立方体并且通过对它的每一个面创建一个纹理来把他变成一个木箱。
在Direct3D中一个威力是通过IDirect3DTexture9接口来实现的。一个纹理是一个类似像素矩阵的表面它能够被映射到三角形上。
纹理坐标
Direct3D使用一个纹理坐标系统。它是由用水平方向的u轴和竖直方向的v轴构成。由u,v坐标决定纹理上的元素,他被叫做texel。如下图
为了加入纹理,需要在原有的顶点结构里加入u和v
创建并赋予材质
纹理数据通常是从存储在磁盘中的图片文件中读取的,且被读进IDirect3DTexture9对象中。我们能够使用下面的D3DX函数完成这项工作。
这个函数可以读取下面图片格式中的任意一种:BMP, DDS, DIB, JPG, PNG, TGA
设置当前纹理,我们使用下面的方法。
为了销毁一个纹理,我们设置pTexture为0。
过滤器
为了防止纹理三角形和屏幕三角形大小不同引起的变形,Direct3D中用过滤来使变形变得平滑。
Direct3D提供了三种不同的过滤器,每种都提供了一个不同品质级别。越好的品质级别越慢。
*Nearest point sampling----这是默认的过滤方法且返回最差的效果。
Linear filtering------推荐使用的
Anisotropic filtering-------过滤产生最好的效果。
Mipmaps
为了使屏幕三角形和纹理三角形差异变小,我们为纹理创建mipmaps链。也就是将一个纹理创建成连续变小的纹理,但是对他们的等级进行定制过滤。
设置mipmaps
Device->SetSamplerState(0, D3DSAMP_MIPFILTER, Filter);
在Filter 处你能用下面三个选项中的一个:
l D3DTEXF_NONE——不使用mipmap。
l D3DTEXF_POINT——通过使用这个过滤器, Direct3D 将选择与 屏幕三角形大小最接近的mipmap 等级。一旦等级选定了,Direct3D 就将按照指定的过滤器进行缩小和放大过滤。
l D3DTEXF_LINEAR ——通过使用这个过滤器,Direct3D 将选择两个最接近的mipmap 等级,缩小和放大过滤每个等级,然后线性联合计算它们两个等级来得到最终的颜色值。
在Direct3D中使用Mipmaps
在Direct3D中实用Mipmpas是很简单的。假如你的显卡支持Mipmaps,D3DXCreateTextureFromFile将为你产生一个Mipmap链。Direct3D自动选择与屏幕三角形最匹配的Mipmaps。
寻址模式
纹理坐标可以在[0, 1]的范围之外i,他通过Direct3D的寻址模式来定义。寻址模式如下
l 环绕纹理寻址模式
l 边框颜色纹理寻址模式
l 截取纹理寻址模式
l 景象纹理寻址模式
在这些图片中,纹理坐标通过(0,0) (0, 3) (3,0) (3,3)顶点来定义。在u轴和v轴上方块又被分成子块放进3X3的矩阵中。
下面的代码片段列举的是怎样设置这四种寻址模式: