代码之家  ›  专栏  ›  技术社区  ›  Ruban4Axis

片段着色器中的纹理读取

  •  0
  • Ruban4Axis  · 技术社区  · 6 年前

    我正在将一个纹理传递给一个片段着色器,我想将该像素值中的纹理颜色与蓝色Alpha 0.2混合,我该怎么做?

    fragment float4 bezier_fragment(VertexOutBezier params[[stage_in]],
                                    texture2d<float> texture [[texture(0)]]
    

    顶点外贝塞尔

    struct VertexOutBezier {
        float4 pos[[position]];
        float4 color;
    
    };
    

    目前我正在这样做,但我在示例中的该着色器函数中遇到错误。”在float canvasColor初始化行中没有用于调用“sample”的匹配成员函数

    fragment float4 bezier_fragment(VertexOutBezier params[[stage_in]],
                                    texture2d<float> texture [[texture(0)]]
                                    )
    {
        constexpr sampler defaultSampler;
        float4 canvasColor = texture.sample(defaultSampler, params.pos);
        float4 finalColor = mix(canvasColor, params.color, 0.2);
        return finalColor;
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   SurvivalMachine    6 年前

    替换此行:

    float4 canvasColor = texture.sample(defaultSampler, params.pos);
    

    float4 canvasColor = texture.sample(defaultSampler, params.pos.xy);
    

    二维纹理由2个坐标采样,您提供了4个坐标。