three.js 着色器材质之glsl内置函数
郭先生发现在开始学习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内置函数的更多相关文章
- Python装饰器、生成器、内置函数、json
这周学习了装饰器和生成器,写下博客,记录一下装饰器和生成器相关的内容. 一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如 ...
- python学习笔记(五):装饰器、生成器、内置函数、json
一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...
- python之装饰器、生成器、内置函数、JSON
一.装饰器: 装饰器,器在这里的意思是函数,也就是装饰函数.作用是给其他函数添加新功能,它可以不改变原有的函数,原来的函数和原来一模一样,什么都不需要改变,只需要在函数外部加上调用哪个装饰器就可以了, ...
- python基础编程: 函数示例、装饰器、模块、内置函数
目录: 函数示例 装饰器 模块 内置函数 一.函数示例: 1.为什么使用函数之模块化程序设计: 不使用模块程序设计的缺点: 1.体系结构不清晰,可主读性差: 2.可扩展性差: 3.程序冗长: 2.定义 ...
- Python笔记_第四篇_高阶编程_再议装饰器和再议内置函数
1. 概述: 我们在前面用了很多的装饰器这个工具的方法.这个位置要系统的讲一下装饰器. 1.2 为什么需要装饰器. 装饰器本质是一个Python函数,它可以让其他函数在不需要任何代码变动的前提下增加额 ...
- python-迭代器、生成器、内置函数及面向过程编程
一.迭代器 迭代器是迭代取值的工具,迭代是一个重复的过程,每一次重复都是基于上一次的结果而来的. 为什么要用迭代器呢? 1.可以不依赖索引取值 2.同一时刻在内存中只有一个值,不会过多的占用内存 如何 ...
- python学习笔记之装饰器、生成器、内置函数、json(五)
一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里面 ...
- WebGL 着色器语言(GLSL ES)
1.类型转换内置函数 转换/函数/描述 转换为整形数/int(float)/将浮点数的小数部分删去,转换为整形数(比如,将3.14转换为3) 转换为整形数/intl(bool)/true被转换为1,f ...
- 【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】
一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...
随机推荐
- java 基本语法(九) 数组(二) 一维数组
1.一维数组的声明与初始化 正确的方式: int num;//声明 num = 10;//初始化 int id = 1001;//声明 + 初始化 int[] ids;//声明 //1.1 静态初始化 ...
- day3 python数据类型转换及变量的缓存机制
类型转换 1,强制类型转换 1.1 number的转换(int,float,bool,complex) num1 = 10 num2 = 10.6 num3 = True num4 = 3 + 4j ...
- 牛客网Java工程师能力评估
感觉很奇怪,出的题做完之后感觉自己没学过Java一样,不过凭借一些做题的技巧和一些记忆,正确率百分之50,排名前百分之30多,记录一下这次的题目,方便我以后进行二次复习吧 1.下面有关JVM内存,说法 ...
- Postman接口测试实战分享,这5个问题你必须得知道!【软件测试工程师经验分享】
在我们日常的测试工作中,接口测试其实很普遍,无论你是做什么测试,功能.自动化亦或是性能测试,都会或多或少接触到接口. 最近也有许多人来询问我:接口测试怎么测?接口测试工具有哪些? 下面我来帮你一一剖析 ...
- OSCP Learning Notes - File Transfers(2)
Metasploit Target Server: Kioptrix Level 1 (1) Start the Metasploit on Kali Linux. (2) Set the modul ...
- 足球动图gif(二)
- JS 原型与原型链终极详解(二)
四. __proto__ JS 在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__ 的内置属性,用于指向创建它的构造函数的原型对象. 对象 person1 有一个 __pr ...
- JAVA基础系列:JDK目录结构
0. 名词解释 SDK: Softeare Development Kit,用于开发JavaEE,包括JDK. JDK: Java Development Kit,java开发工具包,包括Java编译 ...
- python-study-文件操作
# 一.文件操作的作用 :读取内容.写入内容.备份内容.... # 文件的基本操作,文件操作包含:打开.关闭.读.写.复制.... # 打开 读写 关闭 # 文件备份 # 文件和文件夹的操作 # 总结 ...
- WebView in ScrollView:View not displayed because it is too large to fit into a software layer
报错信息 W/View: WebView not displayed because it is too large to fit into a software layer (or drawing ...