OpenGL ES 3.0(二)着色器语言

OpenGL ES 着色器语言:OpenGL ES Shading Language,下面简写为 ES SL 或 SL。

着色器版本指定

#version 300 es

如果没有指定,则默认为 1.00,这是 OpenGL ES 2.0 使用的版本,在 OpenGL ES 3.0 中,制定规范的作者决定匹配 OpenGL ES 和 ES SL 的版本,因此直接从 1.0 跳到了 3.0。

变量类型

标量 float, int, uint, bool 基于标量的数据类型
浮点向量 float, vec2, vec3, vec4 分别表示有 1、2、3、4 个成员的浮点向量
整型向量 int, ivec2, ivec3, ivec4 分别表示有 1、2、3、4 个成员的整型向量
无符号整型向量 uint, uvec2, uvec3, uvec4 分别表示有 1、2、3、4 个成员的无符号整型向量
布尔向量 bool, bvec2, bvec3, bvec4 分别表示有 1、2、3、4 个成员的布尔向量
矩阵 mat2 (or mat2x2), mat2x3, mat2x4, mat3x2, mat3 (or mat3x3), mat3x4, mat4x2, mat4x3, mat4 (or mat4x4) 分别表示 2x2、2x3、…、4x4 矩阵

构造函数

在 OpenGL ES SL 中,对于类型转换有很严格的限制,即变量只允许使用相同类型的其它变量进行赋值或其它操作。但 SL 中提供了一些构造函数可以用于类型转换:

float myFloat = 1.0;
float myFloat2 = 1; // 错误,不正确的类型转换
bool myBool = true;
int myInt = 0;
int myInt2 = 0.0; // 错误,不正切的类型转换
myFloat = float(myBool); // 正确,bool -> float
myFloat = float(myInt); // 正确,int -> float
myBool = bool(myInt); // 正确,int -> bool

向量类型的构造函数:

vec4 myVec4 = vec4(1.0);              // myVec4 = {1.0, 1.0, 1.0, 1.0}
vec3 myVec3 = vec3(1.0, 0.0, 0.5);    // myVec3 = {1.0, 0.0, 0.5}
vec3 temp = vec3(myVec3);             // temp = myVec3
vec2 myVec2 = vec2(myVec3);           // myVec2 = {myVec3.x, myVec3.y}
myVec4 = vec4(myVec2, temp);          // myVec4 = {myVec2.x, myVec2.y, temp.x, temp.y}

矩阵类型的构造函数则更加灵活,规则如下:
1) 如果只提供了一个标量(基本数据类型),则会用这个值填充矩阵的对角线,比如 mat4(1.0) 将会构造一个 4x4 的单位矩阵
2) 可以使用多个向量构造,比如 mat2 可以使用两个 vec2 构造
3) 可以使用多个标量构造

需要注意的是,和平时的写法不同,OpenGL 中的矩阵以列优先的形式排序:

mat3 myMat3 = mat3(1.0, 0.0, 0.0,  // 第一列
                   0.0, 1.0, 0.0,  // 第二列
                   0.0, 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值