游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2670|回复: 6

请问D3D中的粒子系统的ALPHA变化

[复制链接]

1

主题

8

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2008-12-17 20:38:00 | 显示全部楼层 |阅读模式
  写了个简单的粒子系统,想让每个粒子的ALPHA 随着时间逐渐减淡,顶点格式如下
struct POINTVERTEX
{
    D3DXVECTOR3 v;
    D3DXCOLOR  color;
    static const DWORD FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE;
};

对color进行设置时 D3DXCOLOR(r,g,b,a);   r,g,b都有效, 只是a完全没效果,无论a是什么值

我怀疑可能是渲染状态的问题,渲染状态如下

RenderState和背景混合,背景为黑色)
m_pd3dDevice->SetRenderState (D3DRS_ALPHABLENDENABLE, TRUE);
m_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);
m_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR);

TextureStageState:(纹理的颜色&ALPHA操作)
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);

m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);

请各位帮帮忙解决下,谢啦~~



19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-12-17 22:43:00 | 显示全部楼层

Re:请问D3D中的粒子系统的ALPHA变化

SrcBlend和DstBlend应该用SrcAlpha和InvSrcAlpha

1

主题

8

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2008-12-17 22:55:00 | 显示全部楼层

Re:请问D3D中的粒子系统的ALPHA变化

回楼上  我改了 还是没变化  不过比以前更暗了  但是a还是完全没效果

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-12-18 12:50:00 | 显示全部楼层

Re:请问D3D中的粒子系统的ALPHA变化

开启per vertex color,关闭光照

1

主题

8

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2008-12-18 20:01:00 | 显示全部楼层

Re:请问D3D中的粒子系统的ALPHA变化

谢谢qrli , 现在的状态设置如下,光照已关闭,但还是不行~~

        // use alpha from texture
        pd3dDevice->SetTexture(0, m_pTexture );   //设置粒子纹理

        pd3dDevice->SetRenderState(D3DRS_COLORVERTEX, TRUE);       
        pd3dDevice->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1);

        pd3dDevice->SetRenderState (D3DRS_ALPHABLENDENABLE, TRUE);
        pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
        pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

        pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);
        pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_TEXTURE);
        pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);

        pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
        pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_TEXTURE);
        pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-12-19 11:25:00 | 显示全部楼层

Re:请问D3D中的粒子系统的ALPHA变化

还差 BlendOp = Add
如果还不行就是其他地方有问题了
还有最好把texture stage 1给disable了,以免别处打开后没关

1

主题

8

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2008-12-20 11:53:00 | 显示全部楼层

Re:请问D3D中的粒子系统的ALPHA变化

还是解决不了,不过我加了全局光和材质,实现了我想要的效果~~  谢谢qrli的一直关注。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 16:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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