使用Shader画常见的数学函数

本篇博文的灵感来自于Shader Books这一小节:https://thebookofshaders.com/05/?lan=ch

代码运行网站:http://editor.thebookofshaders.com/

一次函数

\[y = x + 0.5
\]
#ifdef GL_ES
precision mediump float;
#endif uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time; // Plot a line on Y using a value between 0.0-1.0
float plot(vec2 st, float y) {
return smoothstep(y-0.01, y, st.y) - smoothstep(y, y+0.01, st.y);
} void main() {
vec2 st = gl_FragCoord.xy/u_resolution; float y = st.x + 0.5; // 这里对于每一个x,求出了其对应的y值;
// Plot a line
float pct = plot(st, y); //使用st
// color = vec3(pct);
vec3 color = pct*vec3(0.0,1.0,0.0); gl_FragColor = vec4(color,1.0);
}

代码整体比较抽象,但是仔细捋一下,也不算太复杂。

这个函数接收像素点对应的坐标,归一化之后的,以及其x对应的y值;由于这是一个shader,所以每个像素都会有一个对应的float返回值,我们尝试看一下每个像素对应的返回值的样子,并把它填充在网格里。

这样边根据y值得到了一条曲线。

二次函数

// Author: CuriosityWang
// Title: Expo #ifdef GL_ES
precision mediump float;
#endif #define PI 3.14159265359 uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time; float plot(vec2 st, float y){
return smoothstep( y-0.01, y, st.y) -
smoothstep( y, y+0.01, st.y);
} void main() {
vec2 st = gl_FragCoord.xy / u_resolution; float y = pow(st.x, 5.); float pct = plot(st, y);
vec3 color= pct*vec3(0.0,1.0,0.0); gl_FragColor = vec4(color,1.0);
}

二次函数的实现道理是一样的,比较重要的点就是plot函数,根据smoothstep上界和下界,通过减法得到曲线。

三角函数

// Author: CuriosityWang
// Title: Expo #ifdef GL_ES
precision mediump float;
#endif #define PI 3.14159265359 uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time; float plot(vec2 st, float y){
return smoothstep( y-0.01, y, st.y) -
smoothstep( y, y+0.01, st.y);
} void main() {
vec2 st = gl_FragCoord.xy / u_resolution; float y = 0.5* sin(st.x*2.*PI) + 0.5; float pct = plot(st, y);
vec3 color= pct*vec3(0.0,1.0,0.0); gl_FragColor = vec4(color,1.0);
}

// Author: CuriosityWang
// Title: Expo #ifdef GL_ES
precision mediump float;
#endif #define PI 3.14159265359 uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time; float plot(vec2 st, float y){
return smoothstep( y-0.01, y, st.y) -
smoothstep( y, y+0.01, st.y);
} void main() {
vec2 st = gl_FragCoord.xy / u_resolution; float y = 0.5*floor(sin(st.x*2.*PI + 3.*u_time)) + 0.5; float pct = plot(st, y);
vec3 color= pct*vec3(0.0,1.0,0.0); gl_FragColor = vec4(color,1.0);
}

使用Shader画常见的数学函数的更多相关文章

  1. Java开发笔记(十一)常见的数学函数

    前面介绍了Java编程的四则运算,虽然提供了基础的加减乘除符号,但是数学上还有其它运算符号,包括四舍五入用到的约等号≍.求绝对值的“| |”.开平方的“√ ̄”,这些运算符形态各异,而且并非ASCII码 ...

  2. MySql常见命令、函数

    ⒈常见命令 命令 说明 show databases; 显示数据库列表 use DataBaseName; 打开指定的数据库 show tables; 显示当前打开数据库的表列表 show table ...

  3. js 绘制数学函数

    <!-- <!doctype html> --> <html lang="en"> <head> <meta charset= ...

  4. PHP 基础篇 - PHP 的 BC MATH 系列数学函数

    一.常见问题 用 PHP 做计算时经常会遇到精度带来的问题,下面来看两个常见的例子: 1. 运算比较 下面表达式输出的结果不是相等: <?php echo 2.01 - 0.01 == 2 ? ...

  5. 2018.8.17 关于JavaScript的几种常见的全局函数

    JavaScript常见的全局函数 <!doctype html> <html lang="en"> <head> <meta chars ...

  6. 【前端】 在前端利用数学函数知识+box-shadow解波浪图形

    序 今天正在刷数学函数相关题目,刷到了下面这篇文章,哇哦-有意思. 利用cos和sin实现复杂的曲线.传送门在下面. CSS 技巧一则 -- 在 CSS 中使用三角函数绘制曲线图形及展示动画 正巧在复 ...

  7. 现代 CSS 解决方案:CSS 数学函数

    在 CSS 中,其实存在各种各样的函数.具体分为: Transform functions Math functions Filter functions Color functions Image ...

  8. Sql Server函数全解<二>数学函数

    阅读目录 1.绝对值函数ABS(x)和返回圆周率的函数PI() 2.平方根函数SQRT(x) 3.获取随机函数的函数RAND()和RAND(x) 4.四舍五入函数ROUND(x,y) 5.符号函数SI ...

  9. Sql Server函数全解(二)数学函数

      数学函数主要用来处理数值数据,主要的数学函数有:绝对值函数,三角函数(包括正弦函数,余弦函数,正切函数,余切函数).对数函数,随机函数等.在错误产生时,数学函数将返回空值null.本次介绍各种数学 ...

  10. Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串

    第四章 数学函数.字符和字符串 4.2 常用数学函数 方法分三类:三角函数方法(trigonometric method).指数函数方法(exponent method)和服务方法(service m ...

随机推荐

  1. LetsTalk_Android中引导用户加入白名单图

    --------------------------------

  2. 即时通讯技术文集(第16期):IM架构设计技术精选(第一部分) [共17篇]

    为了更好地分类阅读总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第16 期. [- 1 -] 浅谈IM系统的架构设计 [链接] http://www.52im.net/thread ...

  3. Solution -「JZOJ #5457」项链

    \(\mathscr{Description}\)   Private link.   给定一条有 \(n\) 个点的圆环和 \(m\) 中颜色, 求在位置旋转, 位置翻转, 颜色旋转等价的意义下, ...

  4. C# HOOK 键盘事件

    C# HOOK 键盘事件 /* by: wgscd date:2023-8-15 desc: test hook in c# */ using System; using System.Collect ...

  5. 阿里云-网络和CDN

    https://www.aliyun.com/product/network/network?spm=5176.24532587.J_3207526240.73.1ac66489MpvOtf

  6. R语言学习数据挖掘

    1.用R计算数据基本统计量(均值) 学习机器学习和数据挖掘中的各种算法和模型,需要掌握统计学的基本概念.统计学是通过搜索.整理.分析数据等手段,以达到推断所测对象的本质,并预测对象未来走势的一门综合性 ...

  7. appExtend.js

    appextend.js是自己编写的一个手机网页过渡时显示loading的一个js插件. appextend.js : var appExtend = function () { this.setHi ...

  8. 数组 & 结构 & 位域 & 联合 & 枚举 & typedef

    C语言提供的五种自定义的构造数据类型: 数组: 是处理同一名字下的不同类型变量的结合体 结构: 是一种归在同一名字下相关的不同类型变量的结合,也可称为不同数据类型的集成体 位域:允许按为访问数据成员的 ...

  9. 央国企“严选”!天翼云夺得IaaS+PaaS市场桂冠!

    10月17日,赛迪顾问发布的<2024中国央国企云市场研究报告>显示,2023年,在中国央国企云"IaaS+PaaS"市场中,中国电信天翼云凭借行业云和全栈服务能力.渠 ...

  10. Vue获取DOM,数据监听,组件,混合和插槽

    Vue获取DOM,数据监听,组件,混合和插槽 注:":" 是指令 "v-bind"的缩写,"@"是指令"v-on"的缩写 ...