微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

hlsl 锐化、模糊后期处理效果代码问题

如何解决hlsl 锐化、模糊后期处理效果代码问题

我正在尝试在我的应用程序中实现锐化、模糊的 hlsl 着色器代码

我参考了 learnopengl 教程并执行了 glsl 代码,这很好

https://learnopengl.com/Advanced-OpenGL/Framebuffers

当我将那些 glsl 代码实现为 hlsl 代码并运行它时

它不适用这里是我的hlsl代码

exture2D screenTex;
SamplerState splr :register(s0);
const float offsetX =1.0f/1600.0f;
const float offsetY = 1.0f / 900.0f;
float4 main(float2 tc : Texcoord) : SV_TARGET
{
    float4 color;
    //Kernels
    float2 offsets[9] = 
    {
        float2(-offsetX,offsetY),//top - left
        float2(0.0f,//top - center
        float2(offsetX,//top - right
        float2(-offsetX,0.0f),//center-left
        float2(0.0f,//center-center
        float2(offsetX,//center-right
        float2(-offsetX,-offsetY),//bottom - left
        float2(0.0f,//bottom - center
        float2(offsetX,-offsetY)  //bottom-right
    };
    //for sharpen effect
    /*float kernel[9] = {
        -1,-1,9,-1
    };*/
    float kernel[9]=
    {
        1.0f / 16.0f,2.0f / 16.0f,1.0f / 16.0f,4.0f / 16.0f,1.0f / 16.0f
    };
    float3 col = float3(0.0f,0.0f,0.0f);
    [unroll]
    for (int i = 0; i < 9; ++i)
    {
        col += screenTex.Sample(splr,tc + offsets[i]).rgb * kernel[i];
    }
    color = float4(col,1.0f);
    return color;
}

如果我运行这些代码,我的场景没有变化

我认为纹理坐标的纹理采样存在问题

ps 我检查了离屏渲染效果很好,简单的效果代码如反转和灰度

它确实工作正常

有什么问题需要帮助

解决方法

当采样纹理坐标操作不起作用时,我发现 hlsl 有什么问题

  col += screenTex.Sample(splr,tc + offsets[i]).rgb * kernel[i];

你应该像这样使用索引

screen.Sample(splr,tc,int2(x,y)

我不确定是否有其他方法可以修改纹理坐标

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。