jum*_*pap 1 opengl shader glsl smoothstep
我正在浏览GLSL上的着色器书教程,我尝试使用该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);
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决这一问题?
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.0if x[i] < edge[i],否则返回1.0.