赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 7 |
经验 | 1584 |
最后登录 | 2024-7-10 |
在线时间 | 69 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 707
- 在线时间
- 69 小时
- 注册时间
- 2012-5-24
- 帖子
- 37
|
有个奇特的bug(sprite和viewport的表现不一致所以怀疑是bug)
我用shader做变形特效时发现,在某些坐标上会取到空颜色,并且与下方图层以异样的方式合成。
如图所示,第一张是sprite直接使用这种shader时的样子。第二张是同一sprite不使用shader,而让它的viewport使用同一shader时的样子。
第二张当中显现的河流图片,是由低层viewport显示的一张普通图片。
若低层viewport的color的alpha设为0,就看不到它,它原本显现的那些区域会成为黑色。若设为0以外的任何值,就是图中效果。
高层viewport计算这些异常区域时,从采样器得到的颜色,利用shader内的if间接判断,我认为是(0,0,0,0)。
附上shader代码:
PS_OUTPUT myPS(float4 color : COLOR0, float2 texcoord : TEXCOORD0)
{
texcoord.x = texcoord.x + (0.5+0.5*sin(8.0*PI*(texcoord.x))) / 16.0;
float4 res = tex2D(spriteSampler, texcoord);
return GetOutput(res);
}
pass MyEft
{
AlphaBlendEnable = true;
SeparateAlphaBlendEnable = true;
BlendOp = ADD;
SrcBlend = ONE;
DestBlend = INVSRCALPHA;
SrcBlendAlpha = ONE;
DestBlendAlpha = INVSRCALPHA;
PixelShader = compile ps_2_0 myPS();
}
其中实现的就是简单的“扩张-挤压”波纹效果。调整算式当中的数值,可能得到没有异常的图,但我看不出规律。 |
|