我正在尝试创建一个着色器,它可以让精灵同时稍微放大(或者只是偏移一点)它的背景,同时显示它的纹理,就像一块绘制的玻璃一样。我找到了一个几乎可以做到这一点的着色器,但是它也会根据上层/精灵的亮度来改变背景:
sampler2D img;
sampler2D bkd : register(s1);
float4 ps_main(in float2 In: TEXCOORD0) : COLOR0 {
float4 L = tex2D(img,In);
float4 B = tex2D(bkd,In);
return (L<0.5)?min(B,(2.0*L)):max(B,(2.0*(L-0.5)));
}
technique tech_main { pass P0 { PixelShader = compile ps_2_0 ps_main(); } }我试着修改参数,但结果很糟糕。
发布于 2019-01-07 22:28:37
要组合纹理,可以是B和L之间的lerp,也可以是B和L*B之间的lerp。您可以将lerp因子公开为控制的统一。
对于放大,需要在纹理查找中缩放背景纹理的UV坐标。只是直接缩放它是行不通的,你需要得到屏幕缓冲区样本的UV坐标和放大镜中心之间的距离,缩放它,然后将它添加到原始UV坐标中。
这是一个短小的放大镜着色器,向你展示我的意思(在GLSL中):
https://stackoverflow.com/questions/54006610
复制相似问题