纹理筛选 (Direct3D 9)

当 Direct3D 呈现基元时,会将 3D 基元映射到 2D 屏幕。 如果基元有纹理,则 Direct3D 必须使用该纹理,以针对基元的 2D 呈现图像中的每个像素生成一种颜色。 基元屏幕图像中的每个像素都必须从纹理获得颜色值。 此过程称作纹理筛选。

执行纹理筛选操作时,所使用的纹理通常会被放大或缩小。 也就是说,该纹理会被映射到大于或小于自身的基元图像。 放大纹理可使多个像素映射到一个纹素。 由此可能生成大块的图像。 放大纹理通常指单个像素被映射到多个纹素。 由此获得的图像可能模糊不清或混叠。 要解决这些问题,必须进行一些纹素颜色的混合,以混合出一种适合的像素颜色。

Direct3D 使复杂的纹理筛选过程变得简单。 Direct3D 提供三类纹理筛选,即线性筛选、各向异性筛选以及 mipmap 筛选。 如果你未选择任何纹理筛选,则 Direct3D 会使用最近点采样技术。

每类纹理筛选各有利弊。 例如,线性纹理筛选可能产生锯齿形边缘或者大块的最终图像。 但从计算角度,这是一个低开销的纹理筛选方法。 mipmap 筛选的效果最好,与各向异性筛选结合使用时尤为如此。 但这对内存容量的要求最高,以存储 Direct3D 支持的技术。

使用纹理接口指针的应用程序应通过调用 IDirect3DDevice9::SetSamplerState 方法来设置当前纹理筛选方法。 将第一个参数的值设置为要为其选择纹理筛选方法的纹理 (0-7) 整数索引号。 为第二个参数传递D3DSAMP_MAGFILTER、D3DSAMP_MINFILTER或D3DSAMP_MIPFILTER,以设置放大、缩小或 mipmapping 筛选器。 将 D3DTEXTUREFILTERTYPE 枚举类型的成员作为第三个参数中的值传递。

本部分介绍 Direct3D 支持的纹理筛选方法。 它按以下主题进行组织。

注意

尽管 D3DRENDERSTATETYPE 枚举类型中存在的纹理筛选呈现状态被纹理阶段状态所取代,但如果尝试使用它们, IDirect3DDevice9::SetRenderState(而不是 IDirect3DDevice2 版本)不会失败。 相反,系统会将这些呈现状态的效果映射到多文本级联的第一阶段(阶段 0)。 应用程序不应将旧呈现状态与其相应的纹理阶段状态混合在一起,因为可能会出现不可预知的结果。

 

Direct3D 纹理