|
[em17]
各位高手我想实现的效果是:纹理1渐变到纹理2
通过设置两纹理的alpha值,但为什么以下的代码没起到一点作用???
哪位高手能帮忙看一下!!!
// Multi texture:多重纹理,此处为两重纹理
// finalColor = destPixelColor * sourcePixelColor
// 设置box纹理贴图
Device->SetTexture(0, texBox);
Device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);//建立纹理索引便宜其它渲染阶段共用,主要在顶点只支持一层纹理或少于实际要渲染纹理时
//failed....?????????????????????????????????????????
//alpha...
static float fAlpha=0.0f;
if (fAlpha<1.0)
fAlpha=fAlpha+0.001f;
Device->SetRenderState(D3DRS_TEXTUREFACTOR,*(DWORD*)&fAlpha);
Device->SetRenderState(D3DRS_ALPHABLENDENABLE,true);
Device->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
Device->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TFACTOR);
Device->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1);
Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); // 颜色来源-纹理
Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); // 使用当前颜色作为第一个texture stage的输出
// 设置黑暗纹理贴图
Device->SetTexture(1, texAlpha);//
Device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0);//因为顶点只支持一层纹理,所以要另外指出纹理坐标
//alpha
fAlpha=1.0-fAlpha;
Device->SetRenderState(D3DRS_TEXTUREFACTOR,*(DWORD*)&(fAlpha));
Device->SetTextureStageState(1,D3DTSS_ALPHAARG1,D3DTA_TFACTOR);
Device->SetTextureStageState(1,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
Device->SetTextureStageState(1,D3DTSS_ALPHAARG2,D3DTA_CURRENT);
Device->SetTextureStageState(1,D3DTSS_ALPHAOP,D3DTOP_MODULATE);//D3DTOP_BLENDTEXTUREALPHA
//color
Device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE); // 颜色来源-纹理颜色
Device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT); // 颜色来源-前一个texture stage
Device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE); // 颜色混合:相乘
// 描绘box
Box->draw(0, 0, 0);
Device->SetRenderState(D3DRS_ALPHABLENDENABLE,false); |
|