专栏首页Creator星球游戏开发社区GLSL ES 语言—变量数值类型

GLSL ES 语言—变量数值类型

数值类型

GLSL 支持两种数据值类型:

  • 数据类型:整数(比如:0、1、2)和浮点数(比如:3.14、29.98)。没有小数点(.)的值被认为是整数,而有小数点的值则被认为是浮点数。
  • 布尔值类型:true和false两个布尔常量。

注意:GLSL ES 不支持字符串类型

变量

变量名需要符合下面规则:

  • 只包括 a~z, A~Z, 0~9 和下划线(_)。
  • 变量名的首字母不能是数字 。不能以 gl、webgl 或 webgl 开头,这些已经被OpenGL ES 保留了。
  • 不能是 GLSL ES 中的关键字和保留字,但你的变量的一份可以是它们。

GLSL ES是强类型语言

GLSL ES 要求你具体指明变量的数据类型: <类型> <变量名>vec4 a_position。 在进行赋值操作(=)时,等号左右两侧的数据类型必须一样,否则会出错。

基本类型

类型

描述

float

单精度浮点数类型

int

整型数

bool

布尔值

下面是声明基本类型变量的例子:

float klimt; //变量为一个浮点数
int utrillo; //变量为一个整型数
bool doga;   //变量为一个布尔值

赋值和类型转换

使用等号(=)可以将值赋给变量,GLSL ES 是强类型语言,在语义上 8 和 8.0 是一个值,但是,将 8 赋值给浮点型变量时会出错。

要将一个整型数值赋值给浮点型变量,需要将整形数转换成浮点数,这个过程称为类型转换。 我们可以使用内置函数 float() 将整型数转换为浮点数,如下所示: int i = 0; float f1 = float(i); float f2 = float(8);

GLSL ES 类型转换内置函数:

转换

函数

描述

转换为整型数

int(float)

去掉浮点数小数部分,转换为整型数

int(bool)

true 转换为1,false 转换为0

转换为浮点点

float(int)

将整型数转换为浮点数

float(bool)

true 转换为1.0,false转换为0.0

转换为布尔值

bool(int)

0转换为false,非0转换为true

bool(float)

0.0 转换为false,非0转换为 true

运算符

GLSL ES 支持运算类型如下:

类别

GLSL ES 数据类型

描述

-

取负

int 或 float

*

乘法

int 或 float,运算的返回值类型与参与运算的值类型相同

/

除法

+

加法

-

减法

++

自增(前缀或后缀)

int 或 float,运算的返回值类型与参与运算的值类型相同

--

自减(前缀或后缀)

=

赋值

int、float 或 bool

+= -= *= /=

算术赋值

int 或 float

< > <= >=

比较

== !=

比较(是否相等)

int、float 或 bool

!

取反

bool 或结果为bool类型的表达式

&&

逻辑与

\

\

\

^^

逻辑异或

condition ? expression1 : express 2

三元选择

condition的类型为bool,expression1 和 expression2 的类型可以是除数组外的任意类型

本文分享自微信公众号 - Creator星球游戏开发社区(creator-star)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 试用阿里开源的 Java 在线诊断分析工具 Arthas 小记

    Arthas支持JDK 6+,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

    周三不加班
  • 【小家Spring】Spring AOP核心类Pointcut解析,对PointcutExpression切点表达式解析原理分析(以AspectJExpressionPointcut为例)

    首先需要说明一点:Pointcut接口有两个。 一个是:org.aspectj.lang.reflect.Pointcut,它是aspectj内部使用的。它只...

    BAT的乌托邦
  • express捕获全局异常的三种方法

    express的路由里抛出异常后,全局中间件没办法捕获,需要在所有的路由函数里写try catch,这坑爹的逻辑让人每次都要多写n行代码 官方错误捕获中件间代...

    雪山飞猪
  • nodejs安装

    前些时在学习操作postman接口时。了解到基于postman的接口自动化框架是postman+newman+jenkins; 这个其实在上家公司就实现过,许久...

    测试小兵
  • 玩转Spring Cache --- @Cacheable/@CachePut/@CacheEvict缓存注解相关基础类打点【享学Spring】

    本文算是了解缓存注解原理的先行文章,因为它抽象出来的模块类比较多,所以做这篇文章进行关键类的打点。 若我们需要扩展缓存注解的能力,对这些抽象是非常有必要深入了...

    BAT的乌托邦
  • nodejs库express是如何接收inbound json请求的

    然后使用app.post("/getSimilarImage", function(req, res){

    Jerry Wang
  • 【小家Spring】Spring AOP之Advisor、PointcutAdvisor、IntroductionAdvisor、IntroductionInterceptor(引介增强)

    上篇文章:【小家Spring】Spring AOP核心类Pointcut解析,对PointcutExpression切点表达式解析原理分析(以AspectJEx...

    BAT的乌托邦
  • 【小家Spring】SpEL你感兴趣的实现原理浅析spring-expression~(SpelExpressionParser、EvaluationContext、rootObject)

    Spring Expression Language(简称 SpEL)是一个支持查询和操作运行时对象导航图功能的强大的表达式语言。它的语法类似于传统 EL,但提...

    BAT的乌托邦
  • express4.0源码解析

    express4.X 跟3.X 有很大区别,4.X 去除了connect的依赖,3.X基于connect的中间件基本全部不能用,如果还有可以使用的,也是4.X重...

    frontoldman
  • 【小家Spring】Spring中@Value注解有多强大?从原理层面去剖析为何它有如此大的“能耐“

    @Value注解是Spring3.0后提出来的一个注解。注解内容本身非常之简单,但是它提供的功能却非常之强大。

    BAT的乌托邦

扫码关注云+社区

领取腾讯云代金券