太难学了,太难了。本文没有自己的理解全是各种知识点的归纳。
类型关键字 | 语法 | 示例 | 说明 |
---|---|---|---|
int | int 变量名 | int a | 整型变量 |
float | float 变量名 | float a | 浮点型变量 |
bool | bool 变量名 | bool a | 布尔型变量 |
vec | vec 变量名 | vec2 a | 向量(vec2/vec3/vec4) |
- GLSL整型关键字:int。 定义整型变量。
- 用于存放自然数的变量。
- 语法:int 变量名;
- 命名规则:以英文字母或下划线开头。
基本用法:
int a; // 定义了整型变量a。
a = 1; // 对整型变量a赋值,变量a的值为1。
int b = 2; // 定义了整型变量b,并赋值为2。
变量名命名示例:
int a_123; // 正确
int a123; // 正确
int 123; // 错误
- GLSL浮点型关键字:float。定义浮点型变量。
- 用于存放小数点数值。
- 语法:float 变量名;
- 命名规则:以英文字母或下划线开头。(与整型无异)
基本用法:
float a; // 定义了浮点型变量a。
a = 2.3; // 对浮点型变量a进行赋值,变量a的值为2.3。
float b = 3.0; // 定义了浮点型变量b,并赋值围为3.0。
- GLSL布尔型关键字:bool。定义布尔变量。
- 用于存放 0 值或非 0 值。0代表false,1代表true。
- 语法:bool 变量名;
- 命名规则:以英文字母或下划线开头。(与整型无异)
基本用法:
bool a; // 定义了布尔型变量a。
a = 1; // 对布尔型变量a进行赋值,变量a的值为1,即 true。
bool b = 0; // 定义了布尔型变量b,并赋值为0,即 false。
- GLSL中向量类型有2维、3维、4维。(所以向量中的数据可以有2个、3个、4个部分)
- 向量中的数据类型:整数、浮点数、布尔值三种类型。
- GLSL中向量数据可以描述颜色、坐标。纹理等。
- 语法:向量类型 变量名
- 一个基本的着色器,会接收一个带有x,y坐标的向量。向量是一个具有固定长度的数组。
- 图像处理中。图片表示为一个向量,每个元素表示该图片某个像素颜色值。将图像数据转换为数值数据;
- 具有大小和方向的量。物理中又称为矢量。
- 与向量对应的量叫“数量”(标量),只有大小没有方向。
- 通过2~4个分量表示一个向量。
- 例:带箭头的线段,线段的箭头代表向量的方向,线段的长度代表向量的大小。
- 在3d图形学中,向量一般用空间某个点表示,大小就是原点到该点的距离,方向则是原点该点的方向。
- 向量的维度:包含数的个数。
- 可以有任意维:一维,二维,三维,四维等的向量 。
- 一个向量可以通过一个数组来描述
- 代表向量,也可以用来表示点
- 常见的数学函数,将向量转换为一个标量
- vec2是有2个数字的数组,vec4是有4个数字的数组。
- 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 | _ |
1. 语法格式
向量类型 变量名;
向量创建赋值说明:
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. 高级用法
- 向量可以由其他向量构造,也可以由向量和标量的组合构造
- vec3需要三个值
- 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描述颜色
- vec4:4分量向量
- 表示四维向量,x,y,x,w四个分量
vec4(x, y, z, w); // X是红色分量,Y是绿色分量,Z是蓝色分量,最后一个组件W是 alpha。
vec4(0.0, 1.0, 0.0, 1.0);
- 把一个向量分解成几个方向的向量的和,方向上的向量就是该向量的分量。(例:(a1,a2,a3)这个向量有三个分量 )
- 分量的个数称为向量的维数。
- 在向量中包含多个分量。
- 如果向量用于描述位置或方向,可以通过x、y、z、w去获取向量中的各分量。
- 如果 向量用于描述颜色,可以通过r、g、b、a去获取向量中的各分量。
- 如果向量用于描述纹理坐标,可以通过s、t、p、q去获取向量中的分量 。
- 可以通过数组的形式去获取向量中的各分量,数组下标从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]
- 只有大小没有方向:只描述物理量的大小,不涉及方向
- 长度,速率、距离、时间等都是标量
- 标量不依赖于坐标系,不受坐标系的旋转或平移等幻变的影响(在坐标变换下保持不变)
- 与向量相对应