游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1667|回复: 4

求助:两纹理的渐变问题(附上完整代码)

[复制链接]

4

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2010-5-20 14:14:00 | 显示全部楼层 |阅读模式
[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);

4

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2010-5-20 14:38:00 | 显示全部楼层

Re: 求助:两纹理的渐变问题(附上完整代码)

~~~~(>_<)~~~~ 代码上传失败

45

主题

1163

帖子

1165

积分

金牌会员

Rank: 6Rank: 6

积分
1165
发表于 2010-5-20 15:04:00 | 显示全部楼层

Re:求助:两纹理的渐变问题(附上完整代码)

Device->SetRenderState(D3DRS_TEXTUREFACTOR,*(DWORD*)&fAlpha);


D3DRS_TEXTUREFACTOR
Color used for multiple-texture blending with the D3DTA_TFACTOR texture-blending argument or the D3DTOP_BLENDFACTORALPHA texture-blending operation. The associated value is a D3DCOLOR variable. The default value is opaque white (0xFFFFFFFF).

D3DCOLOR is defined as:

typedef DWORD D3DCOLOR

4

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2010-5-20 15:13:00 | 显示全部楼层

Re:求助:两纹理的渐变问题(附上完整代码)

我已经把数据类型转换成DWORD,
*(DWORD*)&fAlpha
至于其他还不是特别明白!!!

4

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2010-5-20 15:28:00 | 显示全部楼层

Re:求助:两纹理的渐变问题(附上完整代码)

是不是用shader实现这种效果更方便??
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 14:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表