OpenGL 之 着色语言

数据类型

总的来说,数据类型分为标量,向量,矩阵,采样器,结构体以及数组等几类。
详细来说,分为内建的原生数据类型以及构建数据类型,如:浮点型(float),布尔型(bool),整型(int),矩阵型(matrix),向量型(vec2、vec3)等。

1、标量:bool,int,float
2、向量:
vec2:包含两个浮点数的向量
vec3:包含三个浮点数的向量
vec4:包含四个浮点数的向量
ivec4:包含四个整数的向量
bvec4:包含四个布尔数的向量

将一个向量看做颜色,可以使用rgba分量名,表红绿蓝透明度
将一个向量看做位置,可以使用xyzw分量名,表XYZ轴和向量的模
将一个向量看做纹理坐标,可以使用stpq分量名

3、矩阵:3D场景的移位,旋转,缩放等变换由矩阵来实现
mat2:2 * 2 的浮点数矩阵
mat3:3 * 3 的浮点型矩阵
mat4:4 * 4 的浮点型矩阵
一个矩阵可以看做由几个列向量组成,例如mat3可以看做3个vec3组成

4、采样器:专门用来进行纹理采样的相关操作。一般情况下,一个采样器变量代表一幅或一套纹理贴图
sampler2D:用于访问二维纹理
sampler3D:用于访问三维纹理
samplerCube:用于访问立体贴图纹理
采样器不能在着色器中初始化。一般情况下,采样器变量都由uniform限定符来进行修饰,由宿主鱼眼(如java)接收传递进着色器的值

5、结构体(自定义内建数据类型)
6、数组
声明数组:
vec3 position[20];声明20个vec3的数组,索引从0开始
vec3 position[ ];声明一个不定大小的数组
position[3] = vec3(3,0);自动创建一个大小为4的数组

注意:
1、最好不要在if语句中声明新的变量
2、一般内建变量以gl_开头,用户自定义变量不允许使用
3、初始化技巧
vec2 vb = vec2(2.3,2.5);
vec3 vc = vec3(vec2,13.5);
vec4 vd = vec4(vec2,vec2);
vec4 ve = vec4(0。2);相当于vec4 (0.2,0.2,0.2,0.2);
float a = 6.3;
vec3 vb = vec3(a,a,a);
vec3 vc = vec3(vb.x,vb.y,14.4);
mat3 mb = mat3(vb,vc,1.0,2.0,3.0);
mat3 mc = mat3(2.0);相当于(2.0,0,0,0,2.0,0,0,0,2.0);
vec4 color = vec4(1.0,2.0,3.0,4.0);
vec4 tmp = color.aabb;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值