纹理资源 (Direct3D 9)

纹理资源在 IDirect3DTexture9 接口中实现。 若要获取指向纹理接口的指针,请调用 IDirect3DDevice9::CreateTexture 方法或以下任何 D3DX 函数。

下面的代码示例使用 D3DXCreateTextureFromFile 从 Tiger.bmp加载纹理。

// The following code example assumes that D3dDevice
// is a valid pointer to an IDirect3DDevice9 interface.

LPDIRECT3DTEXTURE9 pTexture;

D3DXCreateTextureFromFile( d3dDevice, "tiger.bmp", &pTexture);

D3DXCreateTextureFromFile 接受的第一个参数是指向 IDirect3DDevice9 接口的指针。 第二个参数告知 Direct3D 从中加载纹理的文件的名称。 第三个参数采用指向 IDirect3DTexture9 接口的指针的地址,该接口表示创建的纹理对象。

使用纹理资源进行呈现

Direct3D 支持通过纹理阶段的概念进行多个纹理混合。 每个纹理阶段都包含可在纹理上执行的纹理和作。 纹理阶段中的纹理构成当前纹理集。 有关详细信息,请参阅 纹理混合(Direct3D 9)。 每个纹理的状态封装在其纹理阶段中。

在C++应用程序中,必须使用 IDirect3DDevice9::SetTextureStageState 方法设置每个纹理的状态。 将阶段号 (0-7) 作为第一个参数的值传递。 将第二个参数的值设置为 D3DTEXTURESTAGESTATETYPE 枚举类型的成员。 最后一个参数是特定纹理状态的状态值。

使用纹理接口指针,应用程序可以呈现最多 8 个纹理的混合。 通过调用 IDirect3DDevice9::SetTexture 方法设置当前纹理。 Direct3D 将所有当前纹理混合到呈现的基元上。

注意

IDirect3DDevice9::SetTexture 方法递增所分配的纹理图面的引用计数。 不再需要纹理时,应将相应阶段的纹理设置为 NULL。 如果无法执行此作,则不会释放图面,从而导致内存泄漏。

 

应用程序可以通过调用 IDirect3DDevice9::SetRenderState 方法来设置当前纹理的纹理包装状态。 将值从 D3DRS_WRAP0 传递到 D3DRS_WRAP7 作为第一个参数的值,并使用 D3DWRAPCOORD_0、D3DWRAPCOORD_1、D3DWRAPCOORD_2 和 D3DWRAPCOORD_3 标志的组合来启用 u、v 或 w 方向的包装。

应用程序还可以设置纹理透视和纹理筛选状态。 请参阅 纹理筛选(Direct3D 9)

Direct3D 纹理