使用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. HVV面试

    linux日志管理 1. 检查系统帐号安全(1) /etc/passwd(2) /etc/shadow(3) 特权用户(uid==0)awk -F: '$3==0{print $1}' /etc/pa ...

  2. 今天记录一下css布局的flex布局的一个小妙招之gap

    在平常前端开发中,常见的开发布局flex布局,常见的布局有这个样子,这个是可以用css进行修改,但是今天分享一个简单的方法 这种布局的话,如果是偶数的话可以用flex的 justify-content ...

  3. Dynaimc CRM查找字段自定义过滤视图

    实现方式参考官方文档提供的Xrm.Page.getControl(arg).addCustomView(viewId, entityName, viewDisplayName, fetchXml, l ...

  4. Solution -「SDOI 2017」「洛谷 P3706」硬币游戏

    \(\mathscr{Description}\)   Link.   给定 \(n\) 个长度为 \(m\) 且两两不同的字符串 \(S_{1..n}\), 字符集 \(|\Sigma|=2\). ...

  5. Flink 部署和整体架构

    一.Flink运行部署模式和流程 部署模式: 1.Local 本地部署,直接启动进程,适合调试使用 2.Standalone Cluster集群部署,flink自带集群模式 3.On Yarn 计算资 ...

  6. Luogu P4310 绝世好题 题解 [ 绿 ] [ 线性 dp ] [ 单调队列优化 ] [ 二进制优化 ]

    题目:绝世好题. 暴力 dp 显然 \(O(n^2)\) 转移即可. 单调队列优化 观察到只有某二进制位两个数都为 \(1\) 时才能转移,因此我们把每个二进制位开一个单调队列,然后对于一个数 \(a ...

  7. mybatis之增删改查

    核心配置文件中配置数据库连接及注册mapper.xml mapper.xml用来编写执行的sql(namespace为对应的接口类,标签id为接口类中的方法名) User为实体对象类 UserDao为 ...

  8. RabbitMQ(九)——消息持久化

    RabbitMQ系列 RabbitMQ(一)--简介 RabbitMQ(二)--模式类型 RabbitMQ(三)--简单模式 RabbitMQ(四)--工作队列模式 RabbitMQ(五)--发布订阅 ...

  9. vim编译和安装clang_complete插件

    今天找到一个插件clang_complete可以进行语法补全,可能不是很好用.但是vim上用应该也差不多了 全文按照这个链接去操作, configure的时候我配置的目录是/usr/bin/vimv8 ...

  10. MySQL - [10] 时间处理函数

    题记部分 (1)获取当前日期时间:select current_date; (2)获取当前时间戳:select current_timestamp; (3)返回日期中的年/季度/月/日/时/分/秒 s ...