'smoothstep':找不到匹配的重载函数

jum*_*pap 1 opengl shader glsl smoothstep

我正在浏览GLSL上的着色器书教程,我尝试使用该smoothstep函数,但是我得到了这个错误.当我改为下面stepsmoothstep函数时,你会发现它.

// 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);
}
Run Code Online (Sandbox Code Playgroud)

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

Rab*_*d76 7

step并且smootstep是具有不同签名和行为的2个函数.在step边缘处生成从0到1的硬转换时,smoothstep在2个值之间平滑插值.

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

genType smoothstep( genType edge0, genType edge1, genType x );
Run Code Online (Sandbox Code Playgroud)
  • edge0 指定Hermite函数下边缘的值.
  • edge1 指定Hermite函数的上边缘的值.
  • x 指定插值的源值.

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

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

genType step( genType edge, genType x);
Run Code Online (Sandbox Code Playgroud)
  • edge 指定步进函数边缘的位置.
  • x 指定用于生成步进函数的值.

step通过比较x到edge生成步进函数.
对于i返回值的元素,返回0.0 if x[i] < edge[i],否则返回1.0.