纹理资源 (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 枚举类型的成员。 最后一个参数是特定纹理状态的状态值。

使用纹理接口指针,应用程序可以呈现最多八个纹理的混合。 通过调用 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 纹理