游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2204|回复: 7

问一个饱和加的问题

[复制链接]

4

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
发表于 2006-1-10 14:38:00 | 显示全部楼层 |阅读模式
我想在D3D下帖纹理的时候,实现饱和加的效果,
就象在2D下,把一个不带alpha通道的位图用饱和加的方式帖到背景上一样,2D下主要用这种方式实现魔法光影一类的效果。
那么在D3D下呢?我现在用D3D的多边形来实现2D游戏,在帖纹理的时候,alpha、加亮什么的都实现了。唯独这个饱和加不知道该怎么设置混合因子。

g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
g_pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
g_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);

这样的多重渲染可以实现加亮,感觉就是饱和加的方式,但是他加亮的一层是基于第一次渲染的纹理的。如果只是渲染一次纹理,要饱和加到背景上该怎么做呢? [em24]

4

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
 楼主| 发表于 2006-1-11 06:20:00 | 显示全部楼层

Re:问一个饱和加的问题

高手们帮忙看一下哎~

17

主题

46

帖子

46

积分

注册会员

Rank: 2

积分
46
发表于 2006-1-11 11:30:00 | 显示全部楼层

Re:问一个饱和加的问题

是我看错了吗?
g_pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
g_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ZERO ); // 为什么不是 D3DBLEND_ONE

4

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
 楼主| 发表于 2006-1-11 12:41:00 | 显示全部楼层

Re:问一个饱和加的问题

不好意思,是我打错了~已经更正

6

主题

22

帖子

28

积分

注册会员

Rank: 2

积分
28
发表于 2006-1-11 14:54:00 | 显示全部楼层

Re: 问一个饱和加的问题

Microsoft DirectX 8.1 (C++)    D3DBLEND
Constants
D3DBLEND_ZERO
Blend factor is (0, 0, 0, 0).
D3DBLEND_ONE
Blend factor is (1, 1, 1, 1).
D3DBLEND_SRCCOLOR
Blend factor is (Rs, Gs, Bs, As).
D3DBLEND_INVSRCCOLOR
Blend factor is (1?Rs, 1?Gs, 1?Bs, 1?As).
D3DBLEND_SRCALPHA
Blend factor is (As, As, As, As).
D3DBLEND_INVSRCALPHA
Blend factor is (1?As, 1?As, 1?As, 1?As).
D3DBLEND_DESTALPHA
Blend factor is (Ad, Ad, Ad, Ad).
D3DBLEND_INVDESTALPHA
Blend factor is (1?Ad, 1?Ad, 1?Ad, 1?Ad).
D3DBLEND_DESTCOLOR
Blend factor is (Rd, Gd, Bd, Ad).
D3DBLEND_INVDESTCOLOR
Blend factor is (1?Rd, 1?Gd, 1?Bd, 1?Ad).
D3DBLEND_SRCALPHASAT
Blend factor is (f, f, f, 1); f = min(As, 1?Ad).

Remarks
In the member descriptions above, the RGBA values of the source and destination are indicated by the subscripts s and d.

看你想怎么混合,如果是alpha混合
设置D3DRS_SRCBLEND = D3DBLEND_SRCALPHA
D3DRS_DESTBLEND = D3DBLEND_INVSRCALPHA

4

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
 楼主| 发表于 2006-1-11 16:22:00 | 显示全部楼层

Re:问一个饱和加的问题

楼上的,你没明白我的意思,我不是要实现纹理多重渲染。

我的意思是,绘制的时候,多边形按顺序绘制,先绘制一个场景的背景图。

然后绘制一个不带alpha通道的纹理,这个纹理绘制的要求是,
每个像素针对之前绘制好的背景上的同坐标的像素,进行饱和加的运算。

就象sea_bug写的这篇文章上的效果,
http://dev.gameres.com/Program/Visual/2D/SkillEffect.htm
只不过他是在DXDraw环境下用表面绘制的。而我是想在D3D下用多边形和纹理实现。

6

主题

22

帖子

28

积分

注册会员

Rank: 2

积分
28
发表于 2006-1-11 17:51:00 | 显示全部楼层

Re: 问一个饱和加的问题

你说的是这个意思吧?
    R1、G1、B1 : 图象像素点的源色值;
    R2、G2、B2 : 底图像素点的源色值;
    R = R1 + R2;( IF R > 255 THEN R = 255 )
    G = G1 + G2;( IF G > 255 THEN G = 255 )
    B = B1 + B2;( IF B > 255 THEN B = 255 )


那就用这对参数
D3DBLEND_SRCCOLOR
Blend factor is (Rs, Gs, Bs, As).
D3DBLEND_INVSRCCOLOR
Blend factor is (1?Rs, 1?Gs, 1?Bs, 1?As).
对rgba分别混合.

4

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
 楼主| 发表于 2006-1-11 20:39:00 | 显示全部楼层

Re:问一个饱和加的问题

哈哈~搞定~!!
多谢楼上的拉~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 05:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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