glsl 内建函数

拜拜、爱过 提交于 2020-03-09 16:12:27

Radians

示例 :

radians(360);
radians(vec2(360,90));

//PI
//vec2(PI,PI/4)

语法 :

float radians(float degrees)  
vec2 radians(vec2 degrees)  
vec3 radians(vec3 degrees)  
vec4 radians(vec4 degrees)

Degrees

示例 :

degrees(PI);

//360

语法 :

float degrees(float radians)  
vec2 degrees(vec2 radians)  
vec3 degrees(vec3 radians)  
vec4 degrees(vec4 radians)

Sine

示例 :

sin(PI/2);

//1

语法 :

float sin(float angle)  
vec2 sin(vec2 angle)  
vec3 sin(vec3 angle)  
vec4 sin(vec4 angle)

Cosine

示例 :

cos(PI/2);

//0

语法 :

float cos(float angle)  
vec2 cos(vec2 angle)  
vec3 cos(vec3 angle)  
vec4 cos(vec4 angle)

Tangent

示例 :

tan(PI/4);

//1

语法 :

float tan(float angle)  
vec2 tan(vec2 angle)  
vec3 tan(vec3 angle)  
vec4 tan(vec4 angle)

Arcsine

示例 :

asin(1);

//PI/2

语法 :

float asin(float angle)  
vec2 asin(vec2 angle)  
vec3 asin(vec3 angle)  
vec4 asin(vec4 angle)

Arccosine

示例 :

acos(0);

//PI/2

语法 :

float acos(float angle)  
vec2 acos(vec2 angle)  
vec3 acos(vec3 angle)  
vec4 acos(vec4 angle)

Arctangent

示例 :

atan(1);

//PI/4

语法 :

//第二象限 (b>0, a>0)或 第三象限(b>0, a<0)
float atan(float y_over_x)  
vec2 atan(vec2 y_over_x)  
vec3 atan(vec3 y_over_x)  
vec4 atan(vec4 y_over_x)
//第一象限 (b>0, a>0)或 第四象限(b>0, a<0)
float atan(float y, float x)  
vec2 atan(vec2 y, vec2 x)  
vec3 atan(vec3 y, vec3 x)  
vec4 atan(vec4 y, vec4 x)

pow

示例 :

pow(2,3);

// 2^3 = 8 

语法 :

float pow(float x, float y)  
vec2 pow(vec2 x, vec2 y)  
vec3 pow(vec3 x, vec3 y)  
vec4 pow(vec4 x, vec4 y)

exp

示例 :

exp(4);

//54.59815003314423

语法 :

float exp(float x)  
vec2 exp(vec2 x)  
vec3 exp(vec3 x)  
vec4 exp(vec4 x)

//e^x

exp2

示例 :

exp2(4);

//16

语法 :

float exp2(float x)  
vec2 exp2(vec2 x)  
vec3 exp2(vec3 x)  
vec4 exp2(vec4 x)

//2^x

log

示例 :

log(4);

//1.3862943611198906

语法 :

float log(float x)  
vec2 log(vec2 x)  
vec3 log(vec3 x)  
vec4 log(vec4 x)

//log(x) = ln(x) = y)
//e^y=x

log2

示例 :

log(4);

//2

语法 :

float log2(float x)  
vec2 log2(vec2 x)  
vec3 log2(vec3 x)  
vec4 log2(vec4 x)

//log2(x) = y)
//2^y=x)

sqrt

示例 :

sqrt(4);

// 2

语法 :

float sqrt(float x)  
vec2 sqrt(vec2 x)  
vec3 sqrt(vec3 x)  
vec4 sqrt(vec4 x)

√x

inversesqrt

示例 :

inversesqrt(4);

//0.5

语法 :

float inversesqrt(float x)  
vec2 inversesqrt(vec2 x)  
vec3 inversesqrt(vec3 x)  
vec4 inversesqrt(vec4 x)

1/√x

abs

示例 :

abs(-4);

// 4

语法 :

float abs(float x)  
vec2 abs(vec2 x)  
vec3 abs(vec3 x)  
vec4 abs(vec4 x)

//|x| 

Sign

示例 :

Sign(-4);

// -1;

语法 :

float sign(float x)  
vec2 sign(vec2 x)  
vec3 sign(vec3 x)  
vec4 sign(vec4 x)

//x/|x| 

Floor

示例 :

floor(1.1);
floor(-1.1);

//1
//-2

语法 :

float floor(float x)  
vec2 floor(vec2 x)  
vec3 floor(vec3 x)  
vec4 floor(vec4 x)

Ceil

示例 :

ceil(1.1);
ceil(-1.1);

//2
//-1

语法 :

float ceil(float x)  
vec2 ceil(vec2 x)  
vec3 ceil(vec3 x)  
vec4 ceil(vec4 x)

Fractional

示例 :

fract(1.1);
fract(-1.1);

//0.1
//0.9

语法 :

float fract(float x)  
vec2 fract(vec2 x)  
vec3 fract(vec3 x)  
vec4 fract(vec4 x)

//y = x - floor(x).

Modulo

示例 :

mod(3,1.2);

//2

语法 :

float mod(float x, float y)  
vec2 mod(vec2 x, vec2 y)  
vec3 mod(vec3 x, vec3 y)  
vec4 mod(vec4 x, vec4 y)

//return floor(x/y); 

Minimum

示例 :

min(3,1);

//1

语法 :

float min(float x, float y)  
vec2 min(vec2 x, vec2 y)  
vec3 min(vec3 x, vec3 y)  
vec4 min(vec4 x, vec4 y)

Maximum

示例 :

max(3,1);

//3

语法 :

float max(float x, float y)  
vec2 max(vec2 x, vec2 y)  
vec3 max(vec3 x, vec3 y)  
vec4 max(vec4 x, vec4 y)

Clamp

示例 :

clamp(0,1,3);
clamp(2,1,3);
clamp(4,1,3);

//1
//2
//3

语法 :

float clamp(float x, float minVal, float maxVal) 
vec2 clamp(vec2 x, vec2 minVal, vec2 maxVal)  
vec3 clamp(vec3 x, vec3 minVal, vec3 maxVal)  
vec4 clamp(vec4 x, vec4 minVal, vec4 maxVal)

//当minVal>x return minVal
//当maxVal<x return maxVal
//否则 return x

Mix

示例 :

mix(5,10,0.5);
mix(5,10,1);

//7.5
//10

语法 :

float mix(float x, float y, float a)  
vec2 mix(vec2 x, vec2 y, vec2 a)  
vec3 mix(vec3 x, vec3 y, vec3 a)  
vec4 mix(vec4 x, vec4 y, vec4 a)

//x*(1-a)+y*a 线性混合

Step

示例 :

step(1 , 2);
step(3 , 2);

//1
//0

语法 :

float step(float edge, float x)  
vec2 step(vec2 edge, vec2 x)  
vec3 step(vec3 edge, vec3 x)  
vec4 step(vec4 edge, vec4 x)

//edge>x?0:1

Smoothstep

示例 :

smoothstep(1 , 2,0.5);
smoothstep(1 , 2,3);
smoothstep(1 , 2,1.3);

//0
//1
//0~1之间平滑

语法 :

float smoothstep(float edge0, float edge1, float x)  
vec2 smoothstep(vec2 edge0, vec2 edge1, vec2 x)  
vec3 smoothstep(vec3 edge0, vec3 edge1, vec3 x)  
vec4 smoothstep(vec4 edge0, vec4 edge1, vec4 x)

//当edge0 >x return 0
//当edge1 <1 return 1
//否则使用Hermite polynomials 在0~1之间插值

Length

示例 :

length(3);
length(vec2(3,4));

//3
//5

语法 :

float length(float x)  
float length(vec2 x)  
float length(vec3 x)  
float length(vec4 x)

//返回各组件平方和之和的平方根

Distance

示例 :

distance(3,4);
distance(vec2(1,1),vec2(4,5));

//1
//5

语法 :

float distance(float p0, float p1)  
float distance(vec2 p0, vec2 p1)  
float distance(vec3 p0, vec3 p1)  
float distance(vec4 p0, vec4 p1)

//returns the distance between two points

Dot

示例 :

dot(3,4);
dot(vec2(2,3),vec(,3,4))

//1
//5

语法 :

float dot(float p0, float p1)  
float dot(vec2 p0, vec2 p1)  
float dot(vec3 p0, vec3 p1)  
float dot(vec4 p0, vec4 p1)

//p0x*p1x+p0y*p1y + ...

Cross

示例 :

cross(vec3(1,0,0),vec3(0,0,1));

//vec3(vec3(0,1,0));

语法 :

vec3 cross(vec3 p0, vec3 p1)

//vec3(p0y*p1z-p0z*p1y,p0z*p1x-p0x*p1z,p0x*p1y-p0y*p1x)
//向量叉积
//垂直于p0,p1所在平面的向量,大小为p0,p1组成的平行四边形面积

Normalize

示例 :

normalize(vec3(2,0,0));
//vec3(1,0,0);

语法 :

float normalize(float p)  
vec2 normalize(vec2 p)  
vec3 normalize(vec3 p)  
vec4 normalize(vec4 p)

//l = length(p);
//if(l>0) l=1/l
//return vec3(px*l,py*l,pz*l)

Faceforward

示例 :

语法 :

float faceforward(float N, float I, float Nref)  
vec2 faceforward(vec2 N, vec2 I, vec2 Nref)  
vec3 faceforward(vec3 N, vec3 I, vec3 Nref)  
vec4 faceforward(vec4 N, vec4 I, vec4 Nref)

//r = dot(i,Nref)
//当 r<0 return N
//否则  return -N

Reflect

示例 :

reflect(vec3(1,1,0),vec3(0,1,0));

//vec3(-1,1,0)

语法 :

float reflect(float I, float N)  
vec2 reflect(vec2 I, vec2 N)  
vec3 reflect(vec3 I, vec3 N)  
vec4 reflect(vec4 I, vec4 N)

//返回入射光对应的反射光

Refract

示例 :

语法 :

float refract(float I, float N, float eta)  
vec2 refract(vec2 I, vec2 N, float eta)  
vec3 refract(vec3 I, vec3 N, float eta)  
vec4 refract(vec4 I, vec4 N, float eta)

//返回入射光对应的折射光
//eta 折射率
//入射光和法线必须是归一化的

MatrixCompMult

示例 :

语法 :

mat2 matrixCompMult(mat2 x, mat2 y)  
mat3 matrixCompMult(mat3 x, mat3 y)  
mat4 matrixCompMult(mat4 x, mat4 y)

//return z[i][j] = x[i][j] * y[i][j]
//和正常的矩阵乘法(z = x * y)不同

LessThan

示例 :

lessThan(vec3(1.0, 2.0, 0.0), vec3(0.5, 5.0, 3.0)) ;

//bvec3(false,true,true);

语法 :

bvec2 lessThan(vec2 x, vec2 y)  
bvec3 lessThan(vec3 x, vec3 y)    
bvec4 lessThan(vec4 x, vec4 y)  

bvec2 lessThan(ivec2 x, ivec2 y)  
bvec3 lessThan(ivec3 x, ivec3 y)  
bvec4 lessThan(ivec4 x, ivec4 y)

//return bvec( x[i] < y[i],...)

LessThanEqual

示例 :

语法 :

bvec2 lessThanEqual(vec2 x, vec2 y)  
bvec3 lessThanEqual(vec3 x, vec3 y)  
bvec4 lessThanEqual(vec4 x, vec4 y)  

bvec2 lessThanEqual(ivec2 x, ivec2 y)  
bvec3 lessThanEqual(ivec3 x, ivec3 y)  
bvec4 lessThanEqual(ivec4 x, ivec4 y)
//小于等于

GreaterThan

示例 :

语法 :

bvec2 greaterThan(vec2 x, vec2 y)  
bvec3 greaterThan(vec3 x, vec3 y)  
bvec4 greaterThan(vec4 x, vec4 y)  

bvec2 greaterThan(ivec2 x, ivec2 y)  
bvec3 greaterThan(ivec3 x, ivec3 y)  
bvec4 greaterThan(ivec4 x, ivec4 y)
//大于

GreaterThanEqual

示例 :

语法 :

bvec2 greaterThanEqual(vec2 x, vec2 y)  
bvec3 greaterThanEqual(vec3 x, vec3 y)  
bvec4 greaterThanEqual(vec4 x, vec4 y)  

bvec2 greaterThanEqual(ivec2 x, ivec2 y)  
bvec3 greaterThanEqual(ivec3 x, ivec3 y)  
bvec4 greaterThanEqual(ivec4 x, ivec4 y)
//大于等于

GreaterThanEqual

示例 :

语法 :

bvec2 greaterThanEqual(vec2 x, vec2 y)  
bvec3 greaterThanEqual(vec3 x, vec3 y)  
bvec4 greaterThanEqual(vec4 x, vec4 y)  

bvec2 greaterThanEqual(ivec2 x, ivec2 y)  
bvec3 greaterThanEqual(ivec3 x, ivec3 y)  
bvec4 greaterThanEqual(ivec4 x, ivec4 y)
//大于等于

Equal

示例 :

语法 :

bvec2 equal(vec2 x, vec2 y)  
bvec3 equal(vec3 x, vec3 y)  
bvec4 equal(vec4 x, vec4 y)  

bvec2 equal(ivec2 x, ivec2 y)  
bvec3 equal(ivec3 x, ivec3 y)  
bvec4 equal(ivec4 x, ivec4 y)
//等于

NotEqual

示例 :

语法 :

bvec2 notEqual(vec2 x, vec2 y)  
bvec3 notEqual(vec3 x, vec3 y)  
bvec4 notEqual(vec4 x, vec4 y)  

bvec2 notEqual(ivec2 x, ivec2 y)  
bvec3 notEqual(ivec3 x, ivec3 y)  
bvec4 notEqual(ivec4 x, ivec4 y)
//等于

Any

示例 :

any(bvec3(false,true,false));
//true;

语法 :

bool any(bvec2 x)  
bool any(bvec3 x)  
bool any(bvec4 x)
//判断是否有一个组件是true

All

示例 :

all (bvecf3(false,true,false));

//false;

语法 :

bool all(bvec2 x)  
bool all(bvec3 x)  
bool all(bvec4 x)
//判断是否所有组件都是true

All

示例 :

all (bvecf3(false,true,false));

//false;

语法 :

bool all(bvec2 x)  
bool all(bvec3 x)  
bool all(bvec4 x)
//判断是否所有组件都是true

Not

示例 :

not(bvecf3(false,true,false));

//bvecf3(true,false,true);

语法 :

bvec2 not(bvec2 x)  
bvec3 not(bvec3 x)  
bvec4 not(bvec4 x)
//非操作

Texture2D

示例 :

语法 :

vec4 texture2D(sampler2D sampler, vec2 coord)  
vec4 texture2D(sampler2D sampler, vec2 coord, float bias)

//bias 为带有mipmap的纹理查找添加 level 的偏差

Texture2D

示例 :

语法 :

vec4 textureCube(samplerCube sampler, vec3 coord)  
vec4 textureCube(samplerCube sampler, vec3 coord, float bias)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!