【问题标题】:'smoothstep' : no matching overloaded function found'smoothstep' : 没有找到匹配的重载函数
【发布时间】:2019-09-26 16:40:48
【问题描述】:

我正在查看 GLSL 上的 Book of Shaders tutorial 并尝试使用 smoothstep 函数,但出现此错误。当我将step 更改为下面的smoothstep 函数时,您可以看到它发生了。

// Author @patriciogv - 2015
// http://patriciogonzalezvivo.com

#ifdef GL_ES
precision mediump float;
#endif

uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;

void main(){
    vec2 st = gl_FragCoord.xy/u_resolution.xy;
    vec3 color = vec3(0.0);

    // bottom-left
    vec2 bl = smoothstep(vec2(0.1),st); 
    float pct = bl.x * bl.y;

    // top-right 
    // vec2 tr = step(vec2(0.1),1.0-st);
    // pct *= tr.x * tr.y;

    color = vec3(pct);

    gl_FragColor = vec4(color,1.0);
}

任何想法如何解决这个问题?

【问题讨论】:

  • 把你的代码放在问题中,而不是它的图片。
  • 当然!感谢您的超级无益!
  • 你是如何解决这个@jumbopap的?当我尝试在 Codepen 中使用 step 时,我得到了这个

标签: opengl glsl shader smoothstep


【解决方案1】:

stepsmootstep 是具有不同签名和行为的 2 个函数。 step 在边缘生成从 0 到 1 的硬过渡,而 smoothstep 在 2 个值之间平滑插值。

如 Khronos 参考中所述,smoothstep 有 3 个参数:

genType smoothstep( genType edge0, genType edge1, genType x );
  • edge0 指定 Hermite 函数下边缘的值。
  • edge1 指定 Hermite 函数上边缘的值。
  • x 指定插值的源值。

edge0 < x < edge1 时,smoothstep 在 0 和 1 之间执行平滑 Hermite 插值。这在需要具有平滑过渡的阈值函数的情况下很有用。

相比之下,step 有 2 个参数:

genType step( genType edge, genType x);
  • edge 指定阶跃函数的边缘位置。
  • x 指定用于生成阶跃函数的值。

step 通过将 x 与边缘进行比较来生成阶跃函数。
对于返回值的元素iif x[i] < edge[i]返回0.0,否则返回1.0。

【讨论】:

    猜你喜欢
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 2020-09-22
    • 2018-04-30
    • 2018-08-01
    • 2018-10-19
    相关资源
    最近更新 更多