需要把多重纹理分别载入内存,并设置它的纹理序号,默认的纹理序号为0,因此需要设置其多重纹理的序号:
D3DXCreateTextureFromFile(g_pd3dDevice, "light.bmp", & g_pTexture2);
g_pd3dDevice->SetTexture(1, g_pTexture2);
2. 设置纹理混合状态
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,D3DTOP_MODULATE );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1,D3DTA_TEXTURE );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2,D3DTA_CURRENT );
纹理状态D3DTSS_COLORARG1和D3DTSS_COLORARG2用来指定当前纹理层与上一层纹理层混合的第一个和第二个参数,D3DTSS_COLOROP指定混合方式。Direct3D使用下面的方法混合纹理:
纹理混合参数D3DTSS_COLORARG1和D3DTSS_COLORARG2的取值如表6-3所示。
表6-3 纹理混合参数
纹理状态D3DTSS_COLOROP和D3DTSS_ALPHAOP用来指定纹理RGB混合和Alpha混合的混合方式,它们可以用来指定属于枚举类型D3DTEXTUREOP的常量。纹理混合方式如表6-4所示。
表6-4 纹理混合方式
3. 设置纹理坐标索引
由于有了多层纹理,因此顶点信息也应该包含每一层纹理坐标的信息。首先需要在顶点格式中加入其他层的纹理坐标,接着要在程序中设定纹理坐标的索引。
4. 纹理混合的程序实现
【例6-2】混合两层纹理: