使用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. 开源 Material Design WPF UI 控件库,易用且功能强大

    前言 Material Design 是由 Google 开发的一套设计指南,提供统一的设计语言,使用户界面更加直观.美观和一致. Material Design In XAML Toolkit 是一 ...

  2. Solution Set -「NOIP Simu.」20221008

    \(\mathscr{A}\sim\)「CF 1680E」Moving Chips   Link & Submission.   Tag:「水题无 tag」   温暖签到惹, DP 一下就好了 ...

  3. .NET 9 new features-Microsoft.ML.Tokenizers 库

    在 .NET 9 中,微软引入了 Microsoft.ML.Tokenizers 库,为 .NET 开发者提供了强大的文本标记化功能. 一.什么是Microsoft.ML.Tokenizers Mic ...

  4. AVL树的插入

    关于AVL树的插入,其实是一个比较复杂的问题,主要是在于他对于"旋转"这一概念,对于这一概念其实我感觉很多博主讲的都不是很明白,包括CHATGPT,也试了,但是也没有比较清楚的解释 ...

  5. Java后台管理框架的开源项目

    1.ThinkGem / JeeSite(开发人员/项目名称) JeeSite是您快速完成项目的最佳基础平台解决方案,JeeSite是您想学习Java平台的最佳学习案例,JeeSite还是接私活的最佳 ...

  6. Mysql死锁问题如何排查和解决

    Mysql 查询是否存在锁表有多种方式,这里只介绍一种最常用的. 1.查看正在进行中的事务SELECT * FROM information_schema.INNODB_TRX2.查看正在锁的事务SE ...

  7. selenium学习-常用方法

    id_#当前元素的ID  tag_name#获取元素标签名的属性  text#获取该元素的文本.  click()#单击(点击)元素  submit()#提交表单  clear()#清除一个文本输入元 ...

  8. webrtc-streamer实时播放监控

    公司要做web端监控实时播放,经过调研,webrtc-streamer的方式对前后端项目侵入最少,且没有延迟卡钝的现象. 一.准备工作 一个摄像头,摄像头对应的rtsp流链接,一台电脑,一个vue项目 ...

  9. Fast Secure Computation of Set Intersection -解读

    本节解读paper:Fast Secure Computation of Set Intersection, 主要内容 在ROM上基于OMGDH问题设计了一个可以抵抗恶意攻击的PSI,主要贡献是对该协 ...

  10. delphi编写sql脚本文件批量执行程序

    程序使用DelphiXE11.1开发,用到控件UniDac9.1.1,QDAC里面的Qlog组件. 程序实现了SQL脚本文件批处理执行应用,运行效果图. 文件.pas代码 unit main; int ...