我正在尝试创建一个着色器,该着色器将允许精灵稍微放大(或稍微偏移一点)其背景并同时显示其纹理,就像一块彩绘玻璃一样。 我找到了几乎可以做到的着色器,但是它也会根据上层/精灵的亮度来更改背景:
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(); } }
我试图修改参数,但是结果很糟糕。
答案 0 :(得分:1)
要组合纹理,可以在B和L之间使用lerp,或者在B和L * B之间使用lerp。您可以将lerp因子公开为统一控件。
要放大,您要在纹理查找中缩放背景纹理的UV坐标。但是,仅将其完全缩放是行不通的,您需要获取屏幕缓冲区样本的UV坐标与放大镜中心之间的距离,进行缩放,然后将其添加到原始UV坐标中。
这是在sharttory上的一个短放大镜着色器,向您展示我的意思(在GLSL中):