郭先生发现在开始学习three.js着色器材质时,我们经常会无从下手,辛苦写下的着色器,也会因莫名的报错而手足无措。原因是着色器材质它涉及到另一种语言–GLSL,只有懂了这个语言,我们才能更好的写出着色器材质,利用好的我们的GPU。这篇说一说glsl内置函数。

1. 和角度相关的函数

下面是一个和角度相关的函数,他们的用法我们度熟悉。

函数 参数 描述
sin(x) 弧度 正弦函数
cos(x) 弧度 余弦函数
tan(x) 弧度 正切函数
asin(x) 弧度 反正弦函数
acos(x) 弧度 反余弦函数
atan(x) 弧度 反正切函数
radians(x) 角度 角度转换为弧度
degrees(x) 弧度 弧度转换为角度

2. 数学函数

这类主要是对指数对数幂函数的操作

函数 描述
pow(x,y) x的y次方。如果x小于0,结果是未定义的。同样,如果x=0并且y<=0,结果也是未定义的。
exp(x) e的x次方
log(x) 计算满足x等于e的y次方的y的值。如果x的值小于0,结果是未定义的。
exp2(x) 计算2的x次方
log2(x) 计算满足x等于2的y次方的y的值。如果x的值小于0,结果是未定义的。
sqrt(x) 计算x的开方。如果x小于0,结果是未定义的。
inversesqrt(x) 计算x的开方之一的值,如果x小于等于0,结果是未定义的。

3. 常用函数

这里是常用函数,和js中的内置函数很像,需要牢记。

函数 描述
abs(x) 返回x的绝对值
sign(x) 如果x>0,返回1.0;如果x=0,返回0,如果x<0,返回-1.0
floor(x) 返回小于等于x的最大整数值
ceil(x) 返回大于等于x的最小整数值
fract(x) 返回x-floor(x),即返回x的小数部分
mod(x, y) 返回x和y的模
min(x, y) 返回x和y的值较小的那个值。
max(x, y) 返回x和y的值较大的那个值。
clamp(x, minVal, maxVal) 将x值钳于minVal和maxVal之间,意思就是当x<minVal时返回minVal,当x>maxVal时返回maxVal,当x在minVal和maxVal之间时,返回x
mix(x, y, a) 返回线性混合的x和y,如:x*(1−a)+y*a
step(edge, x) 如果x < edge,返回0.0,否则返回1.0
smoothstep(edge0, edge1, x) 如果x <= edge0,返回0.0 ;如果x >= edge1 返回1.0;如果edge0 < x < edge1,则执行0~1之间的平滑埃尔米特差值。如果edge0 >= edge1,结果是未定义的。

4. 几何函数

这是与长度、距离、向量等相关的函数

length(x) 返回向量x的长度
distance(p0,p1) 计算向量p0,p1之间的距离
dot 向量x,y之间的点积
cross(x, y) 向量x,y之间的叉积
normalize(x) 标准化向量,返回一个方向和x相同但长度为1的向量
faceforward(N, I, Nref) 如果Nref和I的点积小于0,返回N;否则,返回-N;
reflect(I, N) 返回反射向量
refract(I, N, eta) 返回折射向量

经常用的函数差不多就是这些。还需要我们在实践中反复练习,才能使用的得心应手。

转载请注明地址:郭先生的博客

three.js 着色器材质之glsl内置函数的更多相关文章

  1. Python装饰器、生成器、内置函数、json

    这周学习了装饰器和生成器,写下博客,记录一下装饰器和生成器相关的内容. 一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如 ...

  2. python学习笔记(五):装饰器、生成器、内置函数、json

    一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...

  3. python之装饰器、生成器、内置函数、JSON

    一.装饰器: 装饰器,器在这里的意思是函数,也就是装饰函数.作用是给其他函数添加新功能,它可以不改变原有的函数,原来的函数和原来一模一样,什么都不需要改变,只需要在函数外部加上调用哪个装饰器就可以了, ...

  4. python基础编程: 函数示例、装饰器、模块、内置函数

    目录: 函数示例 装饰器 模块 内置函数 一.函数示例: 1.为什么使用函数之模块化程序设计: 不使用模块程序设计的缺点: 1.体系结构不清晰,可主读性差: 2.可扩展性差: 3.程序冗长: 2.定义 ...

  5. Python笔记_第四篇_高阶编程_再议装饰器和再议内置函数

    1. 概述: 我们在前面用了很多的装饰器这个工具的方法.这个位置要系统的讲一下装饰器. 1.2 为什么需要装饰器. 装饰器本质是一个Python函数,它可以让其他函数在不需要任何代码变动的前提下增加额 ...

  6. python-迭代器、生成器、内置函数及面向过程编程

    一.迭代器 迭代器是迭代取值的工具,迭代是一个重复的过程,每一次重复都是基于上一次的结果而来的. 为什么要用迭代器呢? 1.可以不依赖索引取值 2.同一时刻在内存中只有一个值,不会过多的占用内存 如何 ...

  7. python学习笔记之装饰器、生成器、内置函数、json(五)

    一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里面 ...

  8. WebGL 着色器语言(GLSL ES)

    1.类型转换内置函数 转换/函数/描述 转换为整形数/int(float)/将浮点数的小数部分删去,转换为整形数(比如,将3.14转换为3) 转换为整形数/intl(bool)/true被转换为1,f ...

  9. 【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】

    一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...

随机推荐

  1. Pop!_OS安装与配置(二):基础配置

    Pop!_OS相关使用配置 #0x0 书接上回 #0x1 换源 #0x10 nopasswd sudo #0x11 换国内源 0x2 安装应用 #0x0 书接上回 首先请看上一章末尾, Pop!_OS ...

  2. 已知如下代码,如何修改才能让图片宽度为 300px ?注意下面代码不可修改。

    <img src="1.jpg" style="width:480px!important;”> 总结: max-width:300px transform: ...

  3. 使用Git GUI工具 上传本地仓库到 gitee码云仓库

    前言: 网上关于git的命令操作与使用很多教程和博客,在使用git工具时我发现有一个 git Gui 可视化工具,我觉得十分的亲切,由于我之前一直是使用svn作为版本控制管理工具,都是可视化操作,使用 ...

  4. numpy基础用法学习

    numpy get started 导入numpy库,并查看numpy版本 import numpy as np np.__version__ '1.14.0' 一.创建ndarray 1. 使用np ...

  5. 数据可视化之powerBI技巧(七)从Excel到PowerBI,生成笛卡尔积的几种方式

    假如分别有100个不重复的姓和名,把每个姓和名进行组合匹配,就可以得到一万个不重复的姓名组合,这种完全匹配的方式就是生成一个姓名的笛卡尔积. 下面就来看看生成笛卡尔积的几种方式,为了展现的方便,以5个 ...

  6. C# Dictionary的底层实现解析

    引用: https://www.cnblogs.com/InCerry/p/10325290.html 字典原理分析: 1.用数组存元素,元素的结构体存hashCode.next.key.value. ...

  7. C、C++、Java到Python,编程入门学习什么语言好?

    摘要:回顾编程语言几十年来的兴衰起伏,似乎也折射了整个信息产业的变迁消亡,想要在技术的洪流里激流勇进,找准并学精一两门编程语言更加显得至关重要. 最近,TIOBE更新了7月的编程语言榜单,常年霸榜的C ...

  8. TCP 和 UDP,哪个更胜一筹

    作为 TCP/IP 中两个最具有代表性的传输层协议,TCP 和 UDP 经常被拿出来相互比较.这些协议具体有什么区别,又是什么作用呢? 在 IT 圈混迹多年的小伙伴们,对 TCP 和 UDP 肯定再熟 ...

  9. 为什么大家都在用Fiddler?

    在我们做接口测试的时候,经常需要验证发送的消息是否正确,或者在出现问题的时候,查看手机客户端发送给server端的包内容是否正确,就需要用到抓包工具.常用的抓包工具有fiddler.wireshark ...

  10. Python Hacking Tools - Web Scraper

    Preparation: Python Libray in the following programming: 1. Requests Document: https://2.python-requ ...