webgl基础笔记(三)

338 阅读2分钟

1. 着色器语言基础类型 - 强类型语言

// 程序入口
void main() {
  float f = 10.0;
  int i = 10;
  bool b = true;
}

// 单行注释
/* 多 行注释 */

// 基本类型
// float: 单精度浮点数
// int: 整型
// boolean: 布尔值

// 基本类型类型转换
// float()
// int()
// bool()

2. 矢量和矩阵数据类型

(1) 矢量

  • vec2、vec3、vec4具有2、3、4个浮点数元素的矢量
  • ivec2、ivec3、ivec4具有2、3、4个整型元素的矢量
  • bec2、bec3、bec4具有2、3、4个布尔值元素的矢量
    • 构造函数形式赋值,vec4 position = vec4(0.1, 0.2, 0.3, 1.0)
    • x, y, z, w访问顶点坐标的分量
    • s, t, p, q访问纹理坐标的分量
      • position.x // 0.1
      • position.xy // vec2(0.1, 0.2)
      • position.yx // vec2(0.2, 0.1)
      • position.xyz // vec3(0.1, 0.2, 0.3)

(2) 矩阵

  • mat2、mat3、mat4具有22、33、4*4的浮点数元素矩阵
  • 矩阵参数是列主序的
mat4 m = mat4(
  1.0, 5.0, 9.0, 13.0,
  2.0, 6.0, 10.0, 14.0,
  3.0, 7.0, 11.0, 15.0,
  4.0, 8.0, 12.0, 16.0,
)

3. 分支和循环

if(){}
if(){} else{}
if(){} else if(){} else{}

for(){}
while(){}
do{}while()

// 跳出循环
continue
break
// 只能在片元着色器中使用,表示放弃当前片元直接处理下一个片元
discard

4. 内置函数

// 角度函数
radians 角度转弧度
degress 弧度转角度


// 三角函数
sin 正弦
cos 余弦
tan 正切
asin 反正弦
acos 反余弦
atan 反正切

// 指数函数
pow 次方
exp 自然质数
log 对数
sqrt 开平方
inversesqrt 开平方的倒数

// 通用函数
abs 绝对值
min 最小值
max 最大值
mod 取余数
sign 取符号
floor 向下取整
ceil 向上取整
clamp 限定范围
fract 获取小数部分

5. 存储限定词

const
  • 声明常量,定义后不能被修改
attribute
  • 只能出现在顶点着色器中,只能声明为全局变量,表示单个顶点的信息
unifrom
  • 可以同时出现在顶点着色器和片元着色器中
  • 只读类型,强调一致性
  • 用来存储的是影响所有顶点的数据。如变换矩阵。
varying
  • 从顶点着色器向片元着色器传递数据
精度限定
  • 片元着色器中的float类型没有默认精度,所以使用浮点数类型数据的时候,需要修改默认精度
  • 通过precision关键字来修改着色器的默认精度
    • precision mediump float