代码改变世界

Direct 3D学习笔记(四)——纹理映射

2008-07-30 13:47  libiver  阅读(349)  评论(0编辑  收藏  举报

              Direct 3D学习笔记(四)——纹理映射

 

为了使三维物体的表面看起来更真实,在Direct 3D中提供了在物体表面绘制纹理的功能。在Direct 3D中提供了总共8层纹理贴图,从07,纹理贴图是一张二维图片,也是以COM形式存在,比如常见的.jpg.bmptga等位图文件都可以作为纹理贴图。

正是因为它是一张二维的图片,故在将纹理贴图映射到三维物体表面的时候,需要有个纹理坐标。在设置纹理坐标的时候,要区分纹理的实际坐标和相对坐标。一般情况下,所以的纹理元素相对坐标的地址都在[0.01.0]这个范围内,注意可以通过设置地址范围不在这个二维区间来获得特殊的效果。在下图中,正在使用的纹理地址是(0.5,1.0)。但是,因为纹理的大小不同,所以该纹理地址映射到不同的纹理元素。左边纹理的大小为5x5,纹理地址(0.5,1.0)映射到纹理元素(2,4)。右边纹理的大小为7x7,纹理地址(0.5,1.0)映射到纹理元素(3,6)

 

 

            

 在Direct 3D中,将纹理空间中的纹理元素映射到屏幕空间像素的映射过程常常是一个反映射。也就是说,对于屏幕空间的每个像素,计算其在纹理空间中相应的纹理元素的位置,然后采样该点或者该点附近的纹理颜色。这个过程称为纹理过滤。映射过程可以表示如下图。图的左边显示了一个被理想化为正方形色块的像素。像素四角的地址被映射到对象空间中的三维图元,因为三维场景中图元的形状及观察角度的不同,像素的形状常常会被扭曲。像素四角所对应图元表面的区域然后被映射到纹理空间,这个映射过程会再次扭曲像素的形状。像素的最终颜色根据像素映射的区域所覆盖的纹理元素计算得到。通过设置纹理过滤方法,应用程序可以控制让Direct3D使用何种方法计算像素颜色。

 

 

          

由于纹理需要映射到物体表面,所以需要为需要为物体顶点指定纹理坐标,方法是在灵活定点格式中定义。

Direct 3D为纹理的创建提供了很多种方法,如下:

·       D3DXCreateTexture

·       D3DXCreateTextureFromFile

·       D3DXCreateTextureFromFileEx

·       D3DXCreateTextureFromFileInMemory

·       D3DXCreateTextureFromFileInMemoryEx

·       D3DXCreateTextureFromResource

·       D3DXCreateTextureFromResourceEx

上面各个函数的具体使用方法可以参考文档,在创建了纹理贴图后需要通过

IDirect3DDevice9::SetTexture函数将纹理与指定的纹理层关联,并设置纹理的相关状态。

关于纹理的过滤方式、纹理寻址模式、纹理混合阶段状态等知识下次总结。