游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2088|回复: 9

Alpha 混合问题,续

[复制链接]

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
发表于 2005-9-6 14:57:00 | 显示全部楼层 |阅读模式
pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO);
pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR);

我的理解是这样,混合时的计算公式为:
SRC * 0 + DEST * SRC

我的 SRC 颜色值为 1.0, 1.0, 1.0, 0.85,所以我认为 DEST 颜色的 Alpha 值变成了之前的 0.85。但最后结果和我预想的不一样。

是我猜想的混合公式不正确吗?请问各位正确的混合公式是怎么样的呀

[em19]

0

主题

46

帖子

46

积分

注册会员

Rank: 2

积分
46
发表于 2005-9-6 15:12:00 | 显示全部楼层

Re:Alpha 混合问题,续

result = ALPHA * srcPixel + ( 1 - ALPHA ) * destPixel
不是这个吗?

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
 楼主| 发表于 2005-9-6 15:19:00 | 显示全部楼层

Re:Alpha 混合问题,续

哦,是我没说清楚,我的程序是在 D3D 下的

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-9-6 15:25:00 | 显示全部楼层

Re:Alpha 混合问题,续

要打开Alpha-blending你的公式才有效,还有和你的色彩位深,材质,Z-buffer也有关系

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
 楼主| 发表于 2005-9-7 09:06:00 | 显示全部楼层

Re:Alpha 混合问题,续

那么我猜想的这个混合公式是否正确呢?
pd3dDevice->SetRenderState(D3DRS_SRCBLEND, A);
pd3dDevice->SetRenderState(D3DRS_DESTBLEND, B);

Color.r = SRC.r * A.r + SRC.r * B.r
Color.g = SRC.g * A.g + SRC.g * B.g
Color.b = SRC.b * A.b + SRC.b * B.b
Color.a = SRC.a * A.a + SRC.a * B.a

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-9-7 15:07:00 | 显示全部楼层

Re:Alpha 混合问题,续

你的理解是对的,你可以看一下DX的帮助
你设置D3DRS_SRCBLEND参数,表示的是你将使用D3DRS_SRCBLEND枚举类型来进行Alpha-Blending运算,至于A和B的因子,可以参考帮助,比如D3DBLEND_ONE是(1, 1, 1, 1)

6

主题

110

帖子

110

积分

注册会员

Rank: 2

积分
110
发表于 2005-9-7 16:40:00 | 显示全部楼层

Re:Alpha 混合问题,续

alpha混合是指颜色的各个分量分别混合,

final_r=alpha*(source1_color_r)+(1-alpha)(source2_color_r);
final_g=alpha*(source1_color_g)+(1-alpha)(source2_color_g);
final_b=alpha*(source1_color_b)+(1-alpha)(source2_color_b);

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
 楼主| 发表于 2005-9-8 09:03:00 | 显示全部楼层

Re:Alpha 混合问题,续

我将某个物体用半透明的方式渲染到表面上时用了以下的设置:
pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
结果正确

但我做另一混合时设置
pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO);
pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR);
SRC Color 为 (1.0, 1.0, 1.0, 0.85)
因为渲染目标为一张贴图的表面,我想让它的 Alpha 值变为原来的 85%,但结果却和预想的不一样

请问各位大虾,这是什么原因呢?

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
 楼主| 发表于 2005-9-8 19:06:00 | 显示全部楼层

Re:Alpha 混合问题,续

没人回答,我顶。。。。

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
 楼主| 发表于 2005-9-9 09:10:00 | 显示全部楼层

Re:Alpha 混合问题,续

我再顶。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-27 18:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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