1:DirectX最多支持8重纹理 索引号:0-7
2:第一层默认为D3DTOP_MODULATE,其余为D3DTOP_DISABLE.
3:逐次使用,在前一层使用以后才可启用下一层。必须安装0-1-2-3-4-5-6
-7的顺序。
4:纹理混合是阶段混合,即0和1混合后的结果再和2混合。
5:SetTextureStageState()
6:查询是否支持纹理混合以及支持几层。
if(
pCaps->MaxTextureBlendStages <= 1)
return
false;
7:设置并关联纹理层
定义:
LPDIRECT3DVERTEXBUFFER9 g_pVB =
NULL;
LPDIRECT3DTEXTURE9 g_pTexture1 = NULL;
//第一层纹理
LPDIRECT3DTEXTURE9 g_pTexture2 = NULL; //第二层纹理
创建:
D3DXCreateTextureFromFile( pd3dDevice, L"Wall.bmp",
&g_pTexture1 );
D3DXCreateTextureFromFile( pd3dDevice,
L"light.jpg",
&g_pTexture2 );
关联:
pd3dDevice->SetTexture( 0,
g_pTexture1 );
pd3dDevice->SetTexture( 1, g_pTexture2
);
8:设置纹理坐标索引
如果需要使用不同的纹理坐标,在顶点格式中包含多组坐标。
pd3dDevice->SetTextureStageState(
0, D3DTSS_TEXCOORDINDEX, 0 );
pd3dDevice->SetTextureStageState( 1,
D3DTSS_TEXCOORDINDEX, 1 );
// 定义顶点结构和灵活顶点格式
struct
CUSTOMVERTEX
{
FLOAT x, y, z; // 未经过坐标转换的顶点坐标
DWORD color; //
顶点漫反射颜色值
FLOAT u,v ; // 顶点纹理坐标
FLOAT u1,v1 ; //
顶点纹理坐标
};
9:设置纹理混合
pd3dDevice->SetTextureStageState( 0,
D3DTSS_COLOROP,
D3DTOP_MODULATE );//将下面的纹理层贴图和漫反射颜色相乘
pd3dDevice->SetTextureStageState(
0, D3DTSS_COLORARG1,
D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 0,
D3DTSS_COLORARG2,
D3DTA_DIFFUSE );
pd3dDevice->SetTextureStageState( 0,
D3DTSS_ALPHAOP,
D3DTOP_DISABLE );//禁用0层和1层Alpha通道混合
pd3dDevice->SetSamplerState(0,
D3DSAMP_MAGFILTER,
D3DTEXF_LINEAR);//设置线性过滤
pd3dDevice->SetSamplerState(0,
D3DSAMP_MINFILTER,
D3DTEXF_LINEAR);
pd3dDevice->SetTexture( 1, g_pTexture2
);
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP,
D3DTOP_ADD);
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1,
D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 1,
D3DTSS_COLORARG2,
D3DTA_CURRENT);
pd3dDevice->SetTextureStageState( 1,
D3DTSS_ALPHAOP,
D3DTOP_DISABLE );
pd3dDevice->SetTextureStageState( 1,
D3DTSS_TEXCOORDINDEX,
1 );
pd3dDevice->SetSamplerState(1, D3DSAMP_MAGFILTER,
D3DTEXF_LINEAR);
pd3dDevice->SetSamplerState(1, D3DSAMP_MINFILTER,
D3DTEXF_LINEAR);
D3DTSS_COLORARG1:默认为D3DTA_TEXTURE,即纹理颜色
D3DTSS_COLORARG2:默认为D3DTA_CURRENT,即前一纹理层的输出颜色。当
Stage参数为0时,值为D3DTA_DIFFUSE,像素漫反射颜色值。
D3DTSS_ALPHAARG1:默认为D3DTA_TEXTURE
D3DTSS_ALPHAARG2:默认为D3DTA_CURRENT,Stage参数为0时,值为
D3DTA_DIFFUSE,像素漫反射颜色值
ALPHA混合和颜色混合是分别处理的。
10:OnDestroyDevice中:
SAFE_RELEASE(g_pVB);
SAFE_RELEASE(g_pTexture1);
SAFE_RELEASE(g_pTexture2);
11:渲染
pd3dDevice->SetStreamSource(
0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
pd3dDevice->SetFVF(
D3DFVF_CUSTOMVERTEX );
pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP,
0,
2);