游戏开发论坛

 找回密码
 立即注册
搜索
楼主: ウェブ

求助:关于透明贴图

[复制链接]

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-8-9 17:08:00 | 显示全部楼层

Re:求助:关于透明贴图

我在公司 这个程序我没试过 不知道效果如何

你把你试的结果告诉我

14

主题

156

帖子

158

积分

注册会员

Rank: 2

积分
158
QQ
发表于 2009-8-10 23:53:00 | 显示全部楼层

Re:求助:关于透明贴图

alpha混合时,用ADD方式。。。

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-8-11 10:17:00 | 显示全部楼层

Re:求助:关于透明贴图

add方式不行的  如果背景是白色 那原有颜色都看不清了

昨天我在家试了 我这种算法很好

效果非常棒

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2009-8-11 13:54:00 | 显示全部楼层

Re:求助:关于透明贴图

可以尝试一下photoshop里面的lighten的算法,两个像素比亮度,把亮度高的那个像素写进最后的混合结果。

5

主题

74

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2009-8-12 18:09:00 | 显示全部楼层

Re: Re:求助:关于透明贴图

flyue: Re:求助:关于透明贴图

写个处理程序 把所有图片都处理成带半透明通道的.png图像

载入游戏

嘿嘿,菜鸟,这几天搞2d的游戏,
也过来凑凑热闹,
我一开始用AlphaTest也总是像你的第二种情况,后来发现用ps现处理成png这个方法最实用了,
再设置下(楼上有用自己算法的,太。。太高端了,pfpf
以前只在gdi里头用过,
您老看到可不可以讲下在DX下怎么操作像素(不用shader的话)

g_D3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
g_D3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
g_D3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
就ko了,
看你的第三张,
大概给tex加个material就行了,再设置下
m_Device->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
m_Device->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
m_Device->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE );
。。。。

16

主题

154

帖子

309

积分

中级会员

Rank: 3Rank: 3

积分
309
发表于 2009-8-13 03:27:00 | 显示全部楼层

Re: Re:求助:关于透明贴图

flyue: Re:求助:关于透明贴图

刚刚写的 试试这个

struct Color
{
  unsigned char Alpha, Red, Green, Blue;
}

Color ProcessCo...



这个用到了6个乘法一个除法是不是很慢啊.

63

主题

181

帖子

181

积分

注册会员

Rank: 2

积分
181
发表于 2009-8-13 09:13:00 | 显示全部楼层

Re: Re:求助:关于透明贴图

太牛了~
用Gdi的时候最头痛这个了。
顶!

flyue: Re:求助:关于透明贴图

刚刚写的 试试这个

struct Color
{
  unsigned char Alpha, Red, Green, Blue;
}

Color ProcessCo...

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-8-13 09:16:00 | 显示全部楼层

Re:求助:关于透明贴图

确实慢了点  但是为什么不能先处理成png  然后载入游戏呢

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-8-13 09:20:00 | 显示全部楼层

Re:求助:关于透明贴图

发个pixel shader版的代码此代码已测试通过)

sampler g_TextureSampler;

float4 ProcessColor(in float4 colorIn)
{
        float4 colorOut = 0;
        float colMax = max(max(colorIn.r, colorIn.g), colorIn.b);
        float sat = 1.0f / colMax;
        colorOut.a = (0.299f * colorIn.r) + (0.587f * colorIn.g) + (0.114f * colorIn.b);
        colorOut.r = colorIn.r * sat;
        colorOut.g = colorIn.g * sat;
        colorOut.b = colorIn.b * sat;
        return colorOut;
}

float4 PSMain(in float2 TexUV : TEXCOORD) : COLOR
{
        float4 Color = tex2D(g_TextureSampler, TexUV);
        return ProcessColor(Color);
}

1

主题

14

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2009-8-16 13:36:00 | 显示全部楼层

Re:求助:关于透明贴图

你这种情况设置
SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
就OK了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-21 09:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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