OpenGL ES 着色器语言基础——数据类型概述(一)
2017-06-08 21:32
441 查看
数据类型概述
一、标量 :也被称为“无向量”其值只有大小,并不具有方向。
二、向量
向量在着色器代码的开发中的作用:
根据目的的不同,主要有以下几种用法:
三、矩阵
有一些基础的开发人员都知道,3D场景中的移位、旋转、缩放等变换都是由矩阵的运算来实现的。因此3D场景的开发中会非常多的使用矩阵,矩阵按尺寸分为2x2矩阵、3x3矩阵、4x4矩阵,具体情况如下表所示:
-
OpenGL ES着色语言中,矩阵是按顺序组织的,也就是一个矩阵可以看做由几个列向量组成。 例如:mat3就可以看做由3个vec3组成;
对于矩阵的访问,可以讲矩阵作为列向量的数组来访问。
如matrix为一个mat4,可以使用matrix[2]取到该矩阵的第三列,其为一个vec4;也可以使用matix[2][2]取得第三列向量的第3个分量。
四 采样器
采样器是着色语言中不同于C语言的一种特殊的基本数据类型,其专门用来进行纹理采样的相关操作。一般情况下,一个采样器变量代表一幅或一套纹理贴图,其具体情况如下:
需要注意的是,与前面介绍的几种变量不同,采样器变量不能再着色器中初始化。一般情况下采样器变量都用uniform限定符来修饰,从宿主语言(如java)接受传递进着色器的值。
注意:smapler3D并不是所有的OpenGL ES实现中都支持,因此,若要是用首先在着色器代码中进行设置,打开相应拓展。
五、结构体
OpenGL ES着色语言还提供了类似C语言中的用户自定义结构体,同样也是使用struct关键字进行声明。其基本用法如下:
六、数组
声明数组的方式主要有两种:
代码中访问数组的下标都是编译时常量,这时编译器会自动创建适当大小的数组,使得数组尺寸足够存储编译器看到的最大索引值对应的元素。代码如下:
七、 空类型
空类型使用void表示,仅用来声明不返回任何值得函数。例如在顶点着色器以及片元着色器中必须存在的main函数就是一个返回值为空的函数,代码如下:
精彩课程正在更新,敬请期待!
一、标量 :也被称为“无向量”其值只有大小,并不具有方向。
标量之间的运算遵循简单的代数法则,如质量、密度、体积、时间以及温度等都属于标量。 OpenGL ES着色语言支持的标量类型有布尔型(bool)、整形(int)和浮点型(float)。 //===========语法展示=========== bool b; //声明变量 int a=15; //十进制 int b=036; //八进制(零开头的字面常量为八进制,代表十进制的30) int c=0x3D;//十六进制(0x开头的字面常量为十六进制,代表十进制的58) float f; //声明变量 float f=2.5; //在声明变量的同时为变量赋值 float f,h; //同时声明多个变量 float f,h=2.2 , 1.1; //同时声明多个变量.为其中的变量赋初始值
二、向量
OpenGL ES着色语言中,向量可以看做是用同样类型的标量组成,其基本类型也分为bool、int和float三种。 每个向量可以由2个、3个、4个相同的标量组成
向量类型 | 说明 | 向量类型 | 说明 |
vec2 | 包含了2个浮点数的向量 | ivec4 | 包含了4个整数的向量 |
vec3 | 包含了3个浮点数的向量 | bvec2 | 包含了2个布尔数的向量 |
vec4 | 包含了4个浮点数的向量 | bvec3 | 包含了3个布尔数的向量 |
ivec2 | 包含了2个整数的向量 | bvec4 | 包含了4个布尔数的向量 |
ivec3 | 包含了3个整数的向量 |
可以很方便的存储以及操作颜色、位置、纹理坐标等不仅包含一个组成部分的量。开发中,有时可能需奥单独访问向量中的某个分量, 基本的语法为 “<向量名>.<分量名>”。
根据目的的不同,主要有以下几种用法:
将一个向量看做颜色时,可以使用r,g,b,a四个分量名,分别代表红、绿、蓝、透明度4个色彩通道。 ---------- aColor.r = 0.6; //给向量aColor的红色通道分量赋值 aColor.g = 0.8; //给向量aColor的绿色通道分量赋值 将一个向量看做位置时,可以使用x,y,z,w等4个分量名,分别代表X轴,Y轴,Z轴和向量的模四个分量,具体用法和颜色类似。 ---------- aPosition.x = 67.5; //给向量aPosition的x轴分量赋值 aPosition.y = 67.5; //给向量aPosition的y轴分量赋值 将一个向量看做纹理坐标时,可以使用s,t,p,q四个分量名,期分别代表纹理坐标的不同分量,具体用法同颜色。 访问向量中的各个不同的分量不但可以采用“.”加上不同的分量名,还可以将向量看做一个数组,用下标来进行访问,具体用法如下: ---------- aColor[0] = 0.6; //给向量aColor的红色通道分量赋值 aPosition[2] = 48.6; //给向量aPosition的x轴分量赋值 aTexCoor[1] = 0.34; //给向量aTexCoor的t分量赋值
三、矩阵
有一些基础的开发人员都知道,3D场景中的移位、旋转、缩放等变换都是由矩阵的运算来实现的。因此3D场景的开发中会非常多的使用矩阵,矩阵按尺寸分为2x2矩阵、3x3矩阵、4x4矩阵,具体情况如下表所示:
矩阵类型 | 说明 |
mat2 | 2x2浮点数矩阵 |
mat3 | 3x3浮点数矩阵 |
mat4 | 4x4浮点数矩阵 |
//==========基本用法========== mat2 m2; //声明一个mat2类型矩阵 mat3 m3; //声明一个mat3类型矩阵 mat4 m4; //声明一个mat4类型矩阵
OpenGL ES着色语言中,矩阵是按顺序组织的,也就是一个矩阵可以看做由几个列向量组成。 例如:mat3就可以看做由3个vec3组成;
对于矩阵的访问,可以讲矩阵作为列向量的数组来访问。
如matrix为一个mat4,可以使用matrix[2]取到该矩阵的第三列,其为一个vec4;也可以使用matix[2][2]取得第三列向量的第3个分量。
四 采样器
采样器是着色语言中不同于C语言的一种特殊的基本数据类型,其专门用来进行纹理采样的相关操作。一般情况下,一个采样器变量代表一幅或一套纹理贴图,其具体情况如下:
采样器 | 说明 |
sampler2D | 用于访问二维纹理 |
smapler3D | 用于访问三维纹理 |
samplerCube | 用于访问立方贴图纹理 |
需要注意的是,与前面介绍的几种变量不同,采样器变量不能再着色器中初始化。一般情况下采样器变量都用uniform限定符来修饰,从宿主语言(如java)接受传递进着色器的值。
注意:smapler3D并不是所有的OpenGL ES实现中都支持,因此,若要是用首先在着色器代码中进行设置,打开相应拓展。
五、结构体
OpenGL ES着色语言还提供了类似C语言中的用户自定义结构体,同样也是使用struct关键字进行声明。其基本用法如下:
struct info{ //声明一个结构体 info vec3 color; //颜色成员 vec3 position; //位置成员 vec2 texturecoor; //纹理坐标成员 }
六、数组
声明数组的方式主要有两种:
1.在声明数组的同时,指定数组的大小。 vec3 position[20];//声明 一个包含20个vec3的数组 2.引用数组之前,要再次使用第一种声明方式来生命该数组。 vec3 position[];//声明 一个大小不定的vec3整型数组 vec3 position[5];//再次声明该数组 并指定大小 // (注意:再次声明该数组 并指定大小之后,就不能再进行声明了!)
代码中访问数组的下标都是编译时常量,这时编译器会自动创建适当大小的数组,使得数组尺寸足够存储编译器看到的最大索引值对应的元素。代码如下:
vec3 position[]; //声明了一个大小不定的vec3数组 position[3] = vec3(3.0); //position需要一个大小为4的数组 position[20] = vec3(6.0); //position需要一个大小为21的数组
七、 空类型
空类型使用void表示,仅用来声明不返回任何值得函数。例如在顶点着色器以及片元着色器中必须存在的main函数就是一个返回值为空的函数,代码如下:
void main() {//声明一个空返回值类型的main方法 }
精彩课程正在更新,敬请期待!
相关文章推荐
- Java语言基础数据类型的概述和分类
- Java语言基础——数据类型
- 一:PHP语言基础_数据类型_特殊数据类型
- OpenGL 着色器语言GLSL的数据类型
- Java语言基础(五) Java原始数据类型的分类以及数据范围
- java语言基础——3基本数据类型
- 汇编语言基础教程-数据类型
- Java语言基础——数据类型转换
- C语言基础-数据类型提升的层次结构
- C语言基础(一)之数据类型及指针
- C语言基础知识之基本数据类型相关的总结
- 一:PHP语言基础_数据类型_标量数据类型
- C语言基础知识总结(1)-基本数据类型
- 一:PHP语言基础_数据类型_检测数据类型
- c语言基础数据类型的长度 留下来看看
- Java语言基础02-用户定义数据类型
- 一:PHP语言基础_数据类型_复合数据类型
- Java语言基础09-数据类型
- 【ActionScript3.0入门】之一语言基础——数据类型
- DirectX 3D_基础之HLSL(高级着色语言) HLSL着色器程序的编制 HSLS变量 HLSL入口函数 HLSL程序编译 变量常量类型 设置方法 前缀 关键字 类型 语句 类型转换