WebGL之shaderToy初使用
做图形就要玩shader,我的shader进阶之路,从学习怎么使用shaderToy开始。首先介绍我是看哪篇文章学习的,给出参考文章地址:https://blog.csdn.net/xufeng0991/article/details/78076824,由于本菜鸟是第一次玩shaderToy,就完全根据丿寒灬风丨博主的脚步往前走,一步一步学。
第一步,咱来注册一个账号哈。简单方便,有账号了,我的shaderToy账号就是ccentry,截图一张
好了,我们已经可以看到,有很多demo可供学习,那么我们就来做一个我们自己的小demo吧。我们新建一个demo,我们看到新建的demo给出了示例代码,如下图

在右侧的editor中我们可以看到,片段着色器的主函数是mainImage,带2个参数 fragColor和fragCoord,其中fragColor是out vec4思维向量,fragCoord是in vec2二维向量,前者代表rgba颜色,后者代表屏幕XY的坐标。我们来看看片段着色器对这两个参数都做了什么事。下面先把代码贴出来。
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
// Normalized pixel coordinates (from 0 to 1)
vec2 uv = fragCoord/iResolution.xy; // Time varying pixel color
vec3 col = 0.1 + 0.5*cos(iTime+uv.xyx+vec3(,,)); // Output to screen
fragColor = vec4(col,1.0);
}
我们看到第一句注释//Normalized pixel coordinates (from 0 to 1),这句是说单位化片段的XY坐标,使片段XY处于0到1区间内,这是怎么做到的呢,他是通过将片段坐标去除以iResolution分辨率的xy,这就很讨巧了,不管你屏幕分辨率怎么变化,都能将你的片段坐标单位化到空间(0, 1)区间内,这样就能统一空间坐标系了不是。
接下来的第二件事就和时间轴有关系了我们在第二句代码中一点一点来分析,第二句代码是变色的关键,我们先来看这个0.1,这个我把他理解为环境光,当该值为0.1时,我们来看看显式的效果是怎么样的,如下图所示。
我们可以看到,画布的颜色是偏暗的,接下来就要满足我的好奇心,我们把他改成0.7看看会怎么样,请看修改后的结果如下图所示。

我们看到,画布整个变亮了,这说明就是这个参数调节整个画布的明暗程度,此参数越大,画布越亮,越小越暗。
接下来我们看看第二句代码还做了什么事,我们看到0.5*cos(),那么这个0.5所代表的是啥,这里做个实验,我改成0.1试试啥效果,请看下图。

我们再把他改成0.7试试看,效果如下。

我们对比一下发现,这是透明度的参数,越小越透明,越大越不透明。接下去我们看cos()内部的操作。我们在cos()内部是这样写的
iTime*0.3+uv.xyx+vec3(,,)
这里的iTime是帧刷新率,这个数越大,动画速度越快,也就是同样的操作帧速越高。这里*0.3就是减缓速度。uv.xyx是片段的坐标,很多小伙伴问,为啥是xyx不是xxx也不是xyy呢,那么我做了一下实验,这个xyx是横向纵向横向绘制,xyy是横向纵向纵向绘制,xxx是横向横向横向绘制,最后的vec3()是绘制的颜色。不好理解,我就是靠自己不断的改参数实验出来的结论。接下来这个cos我也改成sin,发现也是呈渐变的绘制,所以这个数学函数可以改成任意的三角函数,就是一个时间曲线,类似bezier曲线。控制绘制时间周期的
最后我们来看看最后一句代码
// Output to screen
fragColor = vec4(col,1.0);
很简单,如注释所言,输出绘制的片段到屏幕上。
这是我第一次尝试shaderToy,谨以此篇记录第一步,再接再厉,给自己打打气。感谢J.C大佬,继续学习shader。如需引用本文,请注明出处:https://www.cnblogs.com/ccentry/p/10049113.html
WebGL之shaderToy初使用的更多相关文章
- 【GISER&&Painter】Chapter01:WebGL渲染初体验
基于上一篇OpenGL的渲染原理,这两周又陆续接触了一些关于WebGL绘图的一些内容,因为刚入门,很多东西又很晦涩,所以特意花了小半天的时间整理了一下,特此记录. 零 画一个多边形吧! 把一个多边形 ...
- WebGL着色器渲染小游戏实战
项目起因 经过对 GLSL 的了解,以及 shadertoy 上各种项目的洗礼,现在开发简单交互图形应该不是一个怎么困难的问题了.下面开始来对一些已有业务逻辑的项目做GLSL渲染器替换开发. 起因是看 ...
- 网页3D效果库Three.js初窥
网页3D效果库Three.js初窥 背景 一直想研究下web页面的3D效果,最后选择了一个比较的成熟的框架Three.js下手 ThreeJs官网 ThreeJs-github; 接下来我会陆续翻译 ...
- WEBGL 2D游戏引擎研发系列 第一章 <新的开始>
WEBGL 2D游戏引擎研发系列 第一章 <新的开始> ~\(≥▽≤)/~HTML5游戏开发者社区(群号:326492427) 转载请注明出处:http://html5gamedev.or ...
- WebGL学习笔记三
在上一章中主要说明了通过矩阵来实现平面图形的平移.旋转.缩放,到最后完全可以用4*4矩阵实现所有的动作,在本章就是第四章主要是对矩阵进行了封装,其WebGL的流程和上一章大部分大部分相同,定义可以在w ...
- Handlebars的基本用法 Handlebars.js使用介绍 http://handlebarsjs.com/ Handlebars.js 模板引擎 javascript/jquery模板引擎——Handlebars初体验 handlebars.js 入门(1) 作为一名前端的你,必须掌握的模板引擎:Handlebars 前端数据模板handlebars与jquery整
Handlebars的基本用法 使用Handlebars,你可以轻松创建语义化模板,Mustache模板和Handlebars是兼容的,所以你可以将Mustache导入Handlebars以使用 Ha ...
- 初学WebGL引擎-BabylonJS:第0篇-起因
学习WebGL的BabylonJS是在一次偶然的情况下进行的,主要为了满足个人对全栈开发的欲望. 言归正传,下面开始简单说说相关过程 WebGL是什么?WebGL是基于html的客户端页面技术,基于h ...
- Shadertoy 教程 Part 1 - 介绍
Note: This series blog was translated from Nathan Vaughn's Shaders Language Tutorial and has been au ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
随机推荐
- 线段树&&线段树的创建线段树的查询&&单节点更新&&区间更新
目录 线段树 什么是线段树? 线段树的创建 线段树的查询 单节点更新 区间更新 未完待续 线段树 实现问题:常用于求数组区间最小值 时间复杂度:(1).建树复杂度:nlogn.(2).线段树算法复杂度 ...
- #001 Emmet的API图片
这个是一张Emmet的快捷键图片,里面包含了所有的快捷键. 虽然有很多的快捷键,但是常用的也就那么几个 . 样式 # ID > 上下级节点 + .col-md-8+.col-md- ...
- 用windows自带的fsutil来创建1G稀疏文件(sparse file)
fsutils file createnew a.dat 1073741824 fsutil sparse setflag a.dat fsutil sparse setrange a.dat 0 ...
- 集合之保持compareTo和equals同步
在Java中我们常使用Comparable接口来实现排序,其中compareTo是实现该接口方法.我们知道compareTo返回0表示两个对象相等,返回正数表示大于,返回负数表示小于.同时我们也知道e ...
- Python中numpy.random.randn()与rand(),numpy.zeros、ones、eye
转自:https://blog.csdn.net/u010758410/article/details/71799142
- 创建ROS工程結構
图像化显示目录工程结构:tree $ sudo apt install tree 1.创建ROS工作空间 $ mkdir -p catkin_ws/src # Create mutil-level d ...
- NYOJ-171 聪明的kk 填表法 普通dp
题目链接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=171 聪明的kk 时间限制:1000 ms | 内存限制:65535 KB 难 ...
- openvpn 上外网
Openvpn-2.2.2 实施记录 最终现象: Linux路由: [root@iZrj961wb7816wke73ql7qZ openvpm]# route -n Kernel IP routing ...
- CCF认证201712-1最小差值
问题描述 给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值. 输入格式 输入第一行包含一个整数n. 第二行包含n个正整数,相邻整数之间使用一个空格分隔. 输出格式 输出一个 ...
- SuperObject Delphi 的 JSON 属性乱序 - 操作类改造 - 关于属性顺序的问题
Delphi 的 ISuperObject 属性顺序为随机.但是很多时候,是需要按加入顺序进行读取.我也看了网上很多人有类似需求.也有人问过原作者,作者答复为:JSON协议规定为无序.看了我真是无语. ...