D3D 纹理映射
来源:互联网 发布:小浣熊水浒传108将淘宝 编辑:程序博客网 时间:2024/06/01 10:03
借助纹理映射,可以将图像数据映射到三角形单元中,这能显著地增加所绘制场景的细节和真实感。
在Dirext3D中纹理用接口IDirect3DTexture9来表示。
1.纹理坐标
由沿水平方向上的U轴和沿竖直方向上的V轴构成。图片的左上角(u,v)=(0,0)。当使用纹理坐标式,需在灵活顶点格式加入纹理坐标成分,并在顶点格式的描述中增加如D3DFVF_TEX1,表示顶点结构中包含了一对纹理坐标。
直到光栅化时,即该3D三角形已被变换至屏幕坐标系时,纹理映射才会进行。
2.创建并启用纹理
纹理数据通常从磁盘中读取,然后加载到IDirect3DTexutre9对象中,可以使用D3DX的如下函数完成纹理创建:
HRESULT D3DXCreateTextureFromFile( __in LPDIRECT3DDEVICE9 pDevice, __in LPCTSTR pSrcFile, __out LPDIRECT3DTEXTURE9 *ppTexture);
该函数可以加载的图片格式有:.bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga。
设置当前纹理可通过如下函数:
HRESULT IDirect3DDevice9::SetTexture ( [in] DWORD Sampler, [in] IDirect3DBaseTexture9 *pTexture);
在Direct3D中最多可以设置8层纹理,可以对这些纹理组合创建多重纹理。
3.纹理过滤器
纹理在被映射到屏幕空间时,通常,纹理三角形与屏幕三角形的大小并不一致。当纹理三角形比屏幕三角形小时,纹理三角形必须被放大。当纹理三角形比屏幕三角形大时,纹理三角形必须被缩小。在这两种情况下,都会有畸变发生,问了在一定程度上克服这种畸变,Direct3D采用纹理过滤技术。
Direct3D提供了三种类型的纹理过滤器:
a.最近采样点:默认过滤方式,速度最快,效果最差。
b.线性纹理过滤:效果较好,建议使用。
c.各向异性纹理过滤:效果最好,速度最慢,使用时需对D3DSAMP_MAXANISOTROPY 水平值进行设定,该值决定了各向异性过滤的质量水平。
4.多级渐进纹理
除了采用纹理过滤器技术外,还可以采用多级渐进纹理技术来消除屏幕三角形和纹理三角形的大小不同造成的影响。方法是:有某一级纹理创建一系列分辨率逐渐减少的纹理图像,并可对没中分辨率下的纹理所采用的过滤方式进行指定。设置方式如下:
HRESULT IDirect3DDevice9::SetSamplerState(
i,
D3DSAMP_MIPFILTER,
D3DTEXTUREFILTERTYPE
);
5.纹理寻址模式
Direct3D定义了6种用来处理纹理坐标值超出[0,1]区间的纹理映射模式:重复(WRAP)、钳位(CLAMP)、镜像(MIRROR)、边界(BORDER)、MIRRORONCE、FORCE_DWORD。
- D3D 纹理映射
- D3D纹理映射
- D3D,一个平面,正反面进行纹理映射
- D3D纹理
- D3D纹理
- 【D3D Review】4 纹理
- d3d纹理过滤
- D3D学习笔记:纹理
- D3D纹理基础
- D3D纹理混合方式
- D3D纹理混合
- D3D加载纹理渲染
- D3D混合纹理
- d3d纹理参数研究
- D3D 纹理 例子程序
- D3D纹理小例
- D3D中的纹理贴图
- MFC d3d纹理贴图
- 内存对齐
- 屏蔽apple键盘的fn功能键
- Python函数式编程指南(四):生成器(转载)
- ABAP-FI常用BAPI
- 在控制台中启动osgi框架
- D3D 纹理映射
- Python函数式编程指南:目录和参考(转载)
- 理解UI线程——swt, Android, 和Swing的UI机理
- POJ 1745 I HATE IT(线段树)
- Equinox OSGi 主要的控制台命令表
- 中文过滤器(Filter)
- Format的那些事儿
- 7个致命的Linux命令
- 浅谈线程关系(Java)