floor ceil fract 各种函数的区别
- Floor : 向下取整。既数轴上最接近目标值的左边值。可以理解为“地板”。floor(0.8) =0,floor(-0.8)=-1
void TestCase(out vec4 fragColor, in vec2 fragCoord)
{
vec2 st = fragCoord/iResolution.xy;
float y=floor(st.x*10.0)/10.0;
float pct = plot(st,y);
vec3 color =pct * vec3(0,0,1) ;
fragColor = vec4(color,0);
}
上述代码将st.x 扩展为10的阶梯。
- Ceil
向上取整. ~天花板 。 ceil(0.8) =1
void TestCaseCeil(out vec4 fragColor, in vec2 fragCoord)
{
vec2 st = fragCoord/iResolution.xy;
float y=ceil(st.x*10.0)/10.0;
float pct = plot(st,y);
vec3 color =pct * vec3(0,0,1) ;
fragColor = vec4(color,0);
}
与上图,第一个台阶的起点不同哦。
- Fract :总体而言,这个函数就比较的 坑。
解释为返回此数的小数部分。按字面理解fract(0.1) = 0.1, fract(-0.1) = -0.1。
然而实际上并非如此,首先,fract的值域为 0~1.
正确的定义为:fract(x) = x - floor(x)
所以对于负数而言: fract(-0.1) = -0.1 -(-1) = 0.9
void TestCaseFract(out vec4 fragColor, in vec2 fragCoord)
{
vec2 st = fragCoord/iResolution.xy;
float y=fract(st.x*10.0)/10.0;
float pct = plot(st,y);
vec3 color =pct * vec3(0,0,1) ;
fragColor = vec4(color,0);
}