GLSL学习(一):基本数据类型

太难学了,太难了。本文没有自己的理解全是各种知识点的归纳。

GLSL数据类型

  • 图表总结
  • 一、整型变量:int
  • 二、浮点型变量:float
  • 三、布尔型变量:bool
  • 四、向量:vec
    • 4.1 数学释义
    • 4.2 关于vec的解读
    • 4.3 向量的类型关键字
    • 4.4 向量用法示例
  • 五、拓展
    • 5.1 分量
      • 5.1.2 获取向量中的分量
    • 5.2 标量
  • 六、相关链接

图表总结

类型关键字 语法 示例 说明
int int 变量名 int a 整型变量
float float 变量名 float a 浮点型变量
bool bool 变量名 bool a 布尔型变量
vec vec 变量名 vec2 a 向量(vec2/vec3/vec4)

一、整型变量:int

  1. GLSL整型关键字:int。 定义整型变量。
  2. 用于存放自然数的变量。
  3. 语法:int 变量名;
  4. 命名规则:以英文字母或下划线开头。

基本用法:

 int a;  // 定义了整型变量a。
 a = 1; // 对整型变量a赋值,变量a的值为1。
 int b = 2; // 定义了整型变量b,并赋值为2。

变量名命名示例:

 int a_123; // 正确
 int a123; // 正确
 int 123; // 错误

二、浮点型变量:float

  1. GLSL浮点型关键字:float。定义浮点型变量。
  2. 用于存放小数点数值。
  3. 语法:float 变量名;
  4. 命名规则:以英文字母或下划线开头。(与整型无异)

基本用法:

 float a; // 定义了浮点型变量a。
 a = 2.3; // 对浮点型变量a进行赋值,变量a的值为2.3。
 float b = 3.0; // 定义了浮点型变量b,并赋值围为3.0。

三、布尔型变量:bool

  1. GLSL布尔型关键字:bool。定义布尔变量。
  2. 用于存放 0 值或非 0 值。0代表false,1代表true。
  3. 语法:bool 变量名;
  4. 命名规则:以英文字母或下划线开头。(与整型无异)

基本用法:

 bool a; // 定义了布尔型变量a。
 a = 1; // 对布尔型变量a进行赋值,变量a的值为1,即 true。
 bool b = 0; // 定义了布尔型变量b,并赋值为0,即 false。

四、向量:vec

  1. GLSL中向量类型有2维、3维、4维。(所以向量中的数据可以有2个、3个、4个部分)
  2. 向量中的数据类型:整数、浮点数、布尔值三种类型。
  3. GLSL中向量数据可以描述颜色、坐标。纹理等。
  4. 语法:向量类型 变量名
  5. 一个基本的着色器,会接收一个带有x,y坐标的向量。向量是一个具有固定长度的数组。
  6. 图像处理中。图片表示为一个向量,每个元素表示该图片某个像素颜色值。将图像数据转换为数值数据;

4.1 数学释义

  1. 具有大小和方向的量。物理中又称为矢量。
  2. 与向量对应的量叫“数量”(标量),只有大小没有方向。
  3. 通过2~4个分量表示一个向量。
  4. 例:带箭头的线段,线段的箭头代表向量的方向,线段的长度代表向量的大小。
  5. 在3d图形学中,向量一般用空间某个点表示,大小就是原点到该点的距离,方向则是原点该点的方向。
  6. 向量的维度:包含数的个数。
  7. 可以有任意维:一维,二维,三维,四维等的向量 。
  8. 一个向量可以通过一个数组来描述

4.2 关于vec的解读

  1. 代表向量,也可以用来表示点
  2. 常见的数学函数,将向量转换为一个标量

4.3 向量的类型关键字

  1. vec2是有2个数字的数组,vec4是有4个数字的数组。
  2. vec3和vec4类型用来存储点和存储向量
关键字 数据类型 示例
vec2 二维向量,具有xy两个分量,分量是浮点数 vec2(0.5, 0.5)
vec3 三维向量 ,具有xyz三个分量,分量是浮点数 vec3(0.5, 0.5, 1)
vec4 四维向量 ,具有xyzw四个分量,分量是浮点数 vec3(0.5, 0.5,1, 1)
ivec2 二维向量,分量是整型数 ivec2(5, 3)
ivec3 三维向量 ,分量是整型数 ivec3(2, 3, 1)
ivec4 四维向量 ,分量是整型数 ivec4(3, 4, 1, 1)
bvec2 二维向量,分量是布尔值bool -
bvec3 三维向量 ,分量是布尔值bool -
bvec4 四维向量 ,分量是布尔值bool _

4.4 向量用法示例

1. 语法格式

向量类型 变量名;

向量创建赋值说明:

  • 声明变量
 vec3 direction;
  • 构造函数赋值
    向量的类型数据需要通过相应的构造函数创建,vec3构造函数创建一个三维向量赋值给direction变量。
 vec3 direction;
 direction = vec3(1.0, 0.0, 0.0) // 赋值

2. 基本用法

 vec3 a; // 定义了向量a,他的类型可以放三个浮点数
 a = vec3(1.0, 2.0, 8.0); // 对向量a进行赋值,使用相同类型的关键字vec3,并通过小括号包含三个浮点数据

 vec4 b = vec4(1.0, 3.0, 6.0, 1.0); // 定义了向量b,并赋值,vec4需要包含4个浮点数。所以通过小括号赋值4个浮点数

3. 高级用法

  1. 向量可以由其他向量构造,也可以由向量和标量的组合构造
  2. vec3需要三个值
  3. vec4可以又两个vec2构建2个标量
 vec3(1.0) == vec3(1.0, 1.0, 1.0);

 vec4(vec2(10.0, 11.0), 1.0, 3.5) == vec4(10.0, vec2(11.0, 1.0), 3.5);
 
 vec3(vec4(1.0, 2.0, 3.0, 4.0)) == vec3(1.0, 2.0, 3.0);
 
 vec4(vec3(1.0, 2.0, 3.0)); // error. Not enough components.
 
 vec2(vec3(1.0, 2.0, 3.0)); // OK

4. vec4描述颜色

  1. vec4:4分量向量
  2. 表示四维向量,x,y,x,w四个分量
 vec4(x, y, z, w); // X是红色分量,Y是绿色分量,Z是蓝色分量,最后一个组件W是 alpha。
 
 vec4(0.0, 1.0, 0.0, 1.0);

五、拓展

5.1 分量

  1. 把一个向量分解成几个方向的向量的和,方向上的向量就是该向量的分量。(例:(a1,a2,a3)这个向量有三个分量 )
  2. 分量的个数称为向量的维数。
  3. 在向量中包含多个分量。

5.1.2 获取向量中的分量

  1. 如果向量用于描述位置或方向,可以通过x、y、z、w去获取向量中的各分量。
  2. 如果 向量用于描述颜色,可以通过r、g、b、a去获取向量中的各分量。
  3. 如果向量用于描述纹理坐标,可以通过s、t、p、q去获取向量中的分量 。
  4. 可以通过数组的形式去获取向量中的各分量,数组下标从0开始


1. 基本用法:

 vec4 b = vec4(1.0, 3.0, 6.0, 1.0);

 b.x //向量b中第一个分量,1.0
 b.y //向量b中第二个分量,3.0
 b.z //向量b中第三个分量,6.0
 b.w //向量b中第四个分量,1.0

// 或者通过数组形式取值,等同于上文:
 b[0], b[1], b[2], b[3]

5.2 标量

  1. 只有大小没有方向:只描述物理量的大小,不涉及方向
  2. 长度,速率、距离、时间等都是标量
  3. 标量不依赖于坐标系,不受坐标系的旋转或平移等幻变的影响(在坐标变换下保持不变)
  4. 与向量相对应

六、相关链接

  1. WebGL着色器向量/矢量
  2. GLSL着色器编程

你可能感兴趣的:(webgl,学习,webgl)