首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >纹理玻璃折射和透明度

纹理玻璃折射和透明度
EN

Stack Overflow用户
提问于 2019-01-02 20:42:58
回答 1查看 135关注 0票数 0

我正在尝试创建一个着色器,它可以让精灵同时稍微放大(或者只是偏移一点)它的背景,同时显示它的纹理,就像一块绘制的玻璃一样。我找到了一个几乎可以做到这一点的着色器,但是它也会根据上层/精灵的亮度来改变背景:

代码语言:javascript
复制
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(); }  }

我试着修改参数,但结果很糟糕。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-07 22:28:37

要组合纹理,可以是B和L之间的lerp,也可以是B和L*B之间的lerp。您可以将lerp因子公开为控制的统一。

对于放大,需要在纹理查找中缩放背景纹理的UV坐标。只是直接缩放它是行不通的,你需要得到屏幕缓冲区样本的UV坐标和放大镜中心之间的距离,缩放它,然后将它添加到原始UV坐标中。

这是一个短小的放大镜着色器,向你展示我的意思(在GLSL中):

https://www.shadertoy.com/view/lsjczh

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54006610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档