游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2799|回复: 5

alpha blending

[复制链接]

46

主题

238

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
发表于 2004-4-26 17:50:00 | 显示全部楼层 |阅读模式
请问哪位大侠有alpha blending的教材,vs的佳,谢谢。

39

主题

170

帖子

170

积分

注册会员

Rank: 2

积分
170
发表于 2004-4-26 18:09:00 | 显示全部楼层

Re: alpha blending

g_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, FALSE );
g_pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
g_pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_ONE );

g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MULTIPLYADD  );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE );
 
在渲染时调一下参数设置
改一下ALPHA就会有所变化:)
D3DRS_SRCBLEND,D3DRS_DESTBLEND 是运算参数可以看一下DX SDK帮助
D3DTOP_MULTIPLYADD 是颜色蝶加
如果想透明,可以在贴图上加上Alpha通道,设置Alpha值,在进行这样的渲染设定就可以了

5

主题

255

帖子

255

积分

中级会员

Rank: 3Rank: 3

积分
255
发表于 2004-4-26 22:26:00 | 显示全部楼层

Re:alpha blending

我没有

46

主题

238

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
 楼主| 发表于 2004-4-26 22:59:00 | 显示全部楼层

Re:alpha blending

只能是纹理,不能是贴图吗,在vs要怎么做呢,要用公式计算吗。

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2004-4-26 23:37:00 | 显示全部楼层

Re:alpha blending

alpha blending 作用在一个texel写入桢缓存的时候。
公式是finalcolor=current pixel*destfactor OP source texel*srcfactor
由SetRenderState(D3DRS_BLENDOP ,)设定想要的混合运算方式OP(如加,减等)然后用SetRenderState(D3DRS_SRCBLEND,)SetRenderState(D3DRS_DESTBLEND,)设定混合运算因子srcfactor,destfactor的来源。
current pixel已定,而source texel的颜色则需要由SetTextureStageState来控制,SetTextureStageState本身还包括纹理混合(从texture stage0混合到texture stageN)每层也要选textureblend OP,texture ARG1,texture ARG2。这个是另外一个话题了……
总之,经过SetTextureStageState的设置后你可以得到想要的source texel,然后此时应用alpha blending公式就得到了这个pass过后的该pixel的混合后颜色。
关于纹理混合和alpha blending的关系大概是这样的,就简单多纹理混合来说,可以使用SetTextureStageState设置多层纹理实现1pass完成,也可以通过Alpha blending实现多pass完成。前者要视乎硬件支持。不过对于一些高级一些的纹理混合,比如EMBM,DOT3等,则无法通过alpha blending完成。
所谓VS控制alpha blending,我想主要是控制输出顶点的颜色属性(r,g,b,a)吧。有时比较方便(比如要随时间改变)。
从这个角度讲PS同样可以控制alpha blending,因为它完全取代的是SetTextureStageState所控制的multi-texture,也就是说它控制source texel,从而控制alpha blending。
记住一点alpha blending的OP是无法通过VS,PS修改的。current pixel也是,而srcfactor和destfactor所指向的目标也无法通过VS,PS修改,不过指向目标的内容可以通过VS,PS修改,texel可以通过VS,PS修改。

另外,除非alpha blending的OP是add,且srcfactor=destfactor=(1,1,1,1), 否则要对有重叠的triangles进行从远到近的排序,否则结果会出错。

46

主题

238

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
 楼主| 发表于 2004-4-28 13:48:00 | 显示全部楼层

Re:alpha blending

谢谢指教,不过我还是对其没有深入的了解,不知有没有教程之类的。谢谢。:)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-1 22:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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