Shader 入门:GLSL ES(数据类型)

前言

在上一篇文章中我们初步了解了 GLSL ES 的基本语法,那么本篇文章就和大家一起学习 GLSL ES 的数据类型。

Let’s go!!!

上一篇:《Shader 入门:GLSL ES(简介和基本语法)》

在本系列文章中主要针对 GLSL ES 3.0 进行讲解


正文

数据类型

标量(Scalar)

标量表示只有大小没有方向的量。

关键字
关键字 含义
int 有符号整型(Signed Integer)
uint 无符号整型(Unsigned Integer)
float 单精度浮点型(Single Floating-Point)
bool 布尔型(Boolean)

声明并赋值:

int age = 18; // 整型
uint hello = 3u; // 无符号整型,在后面数字加 u
float pi = 3.14; // 浮点型
bool isMe = true; // 布尔型
类型转换

标量类型之间可以互相转换。

  • float类型的值转换为 intuint时小数点后面的值将会被忽略,要注意负的 float 类型的值不能转换为 uint 类型。

  • intuintfloat类型的值转换为 bool类型时,00.0将会被转换为 false,所有非零的值都会被转换为 true

  • bool类型的值转换为 intuintfloat类型时,false将会被转换为 00.0true会被转换为 11.0

我们可以使用标量类型的构造函数来进行类型转换:

int a = 1;
float b = float(a); // 1.0
int c = int(b); // 1
uint d = uint(c); // 1u
bool e = bool(d); // true

当尝试将非标量值转换为标量值时,实际处理的将会是非标量值的第一个元素:

vec3 a = vec3(0.1, 0.2, 0.3);
float b = float(a); // 0.1

向量(Vector)

在 GLSL 中向量一般用于储存顶点坐标、颜色或纹理坐标数据。

一个向量可以包含 2 到 4 个分量(Component),分量的类型也可以是以上基础类型中的任意一个,一般情况下我们使用浮点型 vecn就已经足够了。

关键字

下面表格中的 n为分量的个数

关键字 含义 举例
vecn 包含 n 个 float类型分量的向量 vec2vec4
ivecn 包含 n 个 int类型分量的向量 ivec2ivec4
uvecn 包含 n 个 uint类型分量的向量 uvec2uvec4
bvecn 包含 n 个 bool类型分量的向量 bvec2bvec4
创建向量

我们可以使用不同的构造函数来创建相应的向量:

vec2 coord = vec2(0.5, 0.5); // 含有 2 个 float 类型分量的向量
ivec3 police = ivec3(1, 1, 0); // 含有 3 个 int 类型分量的向量
bvec4 hello = bvec4(true, false, true, false); // 含有 4 个 bool 类型分量的向量

只传入一个参数的情况下会自动将其他值也设为第一个参数:

vec3 three = vec3(0.1); // 等同于 vec3(0.1, 0.1, 0.1)

也可以使用一个向量作为参数传给另一个向量构造函数:

vec2 two = vec2(0.1, 0.2);
vec3 three = vec3(two, 0.3); // vec3(0.1, 0.2, 0.3)

而将“大”向量作为参数来创建“小”向量(降维)会自动抛弃多余的值:

vec4 four = vec4(0.1, 0.2, 0.3, 0.4);
vec3 three = vec3(four); // 等同于 vec3(0.1, 0.2, 0.3),抛弃了 0.4
获取分量

通过分量名来获取向量中的第 1 到第 4 个分量,包括:

实际上所有向量都可以使用 rgbargbastpq分量名,但是为了代码的严谨性和可读性,建议使用相应的分量名

分量名(对应第 1 - 4 个分量) 使用场景
x, y, z, w 顶点坐标向量
r, g, b, a 颜色向量
s, t, p, q 纹理坐标向量

使用 .运算符加分量名来获取向量的分量:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值