聚合类型-----(向量 )
(1) 什么是向量
标量 :也被称为“无向量”其值只有大小,并不具有方向。
OpenGL ES着色语言支持的标量类型有布尔型(bool)、整形(int)和浮点型(float)。
向量 :OpenGL ES着色语言中,向量可以看做是用同样类型的标量组成
其基本类型也分为bool、int和float三种。 每个向量可以由2个、3个、4个相同的标量组成
(2) 向量作用
向量在着色器代码的开发中的作用:
可以很方便的存储以及操作颜色、位置、纹理坐标等不仅包含一个组成部分的量。
开发中,有时可能需要单独访问向量中的某个分量,
基本的语法为 “<向量名>.<分量名>”。
总结:GLSL的基本类型可以进行合并,从而与核心OpenGL··的数据类型相匹配,以及简化计算过程的操作。
(3) 向量 基本类型
基本类型 | 2D向量 | 3D向量 | 4D向量 |
float | vec2 (包含了2个32位浮点数的向量) | vec3 | vec4 |
(集成的显卡好像不行,只能独立卡) | |||
int | ivec2 (包含了2个整数的向量) | ivec3 | ivec4 |
bool | bvec2 (包含了2个布尔数的向量) | bvec3 | bvec4 |
(4) 向量的初始化
向量初始化:
1、使用这些类型声明的变量的初始化过程 与 标量部分是类似的
例如:(声明一个包含了3个32位浮点数的向量)
vec3 velocity=vec3( 0.0,2.0,3.0 );
2、类型之间也可以进行等价转换
例如:(将一个包含了3个32位浮点数的向量 等价转换为 一个包含3个整数的向量)
vec3 velocity=vec3( 0.0,2.0,3.0 );
ivec3 steps =ivec3 (velocity);
3、向量的构造函数还可以用来截短或者加长一个向量。
如果我们将一个较长的向量传递给一个较短向量的构造函数,那么向量将会被自动 取短到对应的长度
例如:
截短: (将一个包含了4个32位浮点数的向量 截短成 一个包含3个32位浮点数的向量)
vec4 color;//RGB A
vec3 RGB=vec3 (color);//现在RGB只有前三个分量了
加长: (将一个包含了3个32位浮点数的向量 加长为 一个包含4个32位浮点数的向量)
vec3 white=vec3(1.0); //white=(1.0,1.0,1.0)
vec4 translucent=vec4 (white,0);