聚合类型-----(向量 )
(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);