.plan

everybody lies

导航

2008年的D3D学习笔记(3)

月曜日:Direct3D:纹理映射

2008/07/14 14:10

所谓为例映射就是可以把图像数据映射到三角单元上,使用的接口是IDirect2DTexture9

1,纹理坐标

纹理的坐标系是沿着水平方向和垂直方向的,对于坐标系标示的纹理元素称为纹理元。且坐标限定在区间[0,1]内。要显示纹理,需要在顶点结构中添加纹理坐标。且修改FVF值。

2,创建并启用纹理

纹理数据从图像文件中读入,写入到IDirect3DTexture9中,

使用HRESULT D3DXCreateTextureFromFile

       LPDIRECT3DDEVICE9 pDevice,

       LPCTSTR pSrcFile,

       LPDIRECT3DTEXTURE9 * ppTexture

};

使用

HRESULT IDtrect3DDeviceq::SetTexture(

      DWORD Stage,

     IDirect3DBaseTexture9* pTexture

);来设置纹理。

ps:在D3D中,最多可以设置8层纹理,来创建更加细致的图

pTexture设置为0的时候则禁用某一层纹理。

3,纹理过滤器
当纹理被映射到屏幕空间的时候,纹理三角形和屏幕三角形大小常常并不一致,,当纹理三角形比屏幕小时为了适应后者,纹理三角形必须被放大(magnified),当纹理三角形比较大的时候必须被缩小(minified)。这时候往往纹理会发生畸变,这是就是过滤器用武之地。
D3D
提供了3种类型的纹理过滤器(filerter),每种过滤器都提供了一种质量水平。
使用IDirect3DDevice9->SetSamplerState来设置:
1,
最近点采样,这是D3D默认的过滤方式,速度快,效果差
2
,线性纹理过滤,这种类型的过滤方式可以产生相当好的结果,速度也很客观。这是最受推荐的过滤方式。
3
,各向异性纹理过滤,效果好,速度慢


4,多级渐进纹理
3中说道,屏幕三角和纹理三角大小不一致,为了消除影响,为纹理创建一个多级渐进纹理链。方法是:由某一纹理创建一系列分辨率逐渐减小的纹理图像,并且对每种分辨率下的纹理所采用的过滤方式进行定制,以保留重要的细节。
使用D3DXCreateTextureFromFile函数可以创建一个多级渐进纹理链。

5,寻址模式
之前说过,纹理坐标必须限制在[0,1]中,有时候,坐标可能超出这个范围,这时候,需要来进行映射处理。
D3D
定义了4种模式:重复寻址模式,边界颜色寻址模式,clamp寻址模式,景象寻址模式。

posted on 2009-07-22 23:11  housechen  阅读(424)  评论(0编辑  收藏  举报