OpenGL着色器语言4.14-4.1.7(浮点型变量,向量,矩阵,不透明类型(采样器))

4.1.4 浮点型变量

为了变化多样的标量计算,单精度和双精度浮点型变量被提供使用。通常来说,浮点型既指代双精度也指代单精度的浮点型。浮点型变量如下定义:

float a, b = 1.5; // 单精度浮点型
double c, d = 2.0LF; // 双精度浮点型

 作为一个处理单元的输入值,一个单精度或双精度的变量对应IEEE754浮点型的精度和动态范围。一个着色器中的浮点型变量也根据IEEE754说明书对单精度浮点型值进行编码(逻辑上,而物理上不需要)因为逻辑上是按照IEEE754进行编码的,所以操作(加法,乘法等)不需要遵循IEEE754的原则。见4.7.1节"范围和精度"了解更多有关精度和NaN以及Inf(正无穷或负无穷)的用法。

浮点型常量的定义方式如下:

浮点型常量

部分常量 指数部分(可选) 浮点后缀(可选)

数字序列 指数部分 浮点后缀(可选)

部分常量:

数字序列 数字序列

数字序列 .

.数字序列

指数部分:

符号e(可选)数字序列

符号E(可选)数字序列

符号:+-中的一个

数字序列:

数字

数字序列 数字

浮点后缀:

f F lf LF中的一个


如果出现指数部分,则不需要小数点。在浮点型常量中,包括后缀中,都不能出现空格。当出现后缀lf或LF时,字面量为double类型。否则,字面量的类型为float。开头处的减号将被解释为一个一元操作符而不是浮点型常量中的一部分。


4.1.5 向量

OpenGL着色器语言包含  2元,3元,4元 浮点型,整型,布尔型 向量。浮点型向量变量可以用于存储颜色,法线,位置,纹理坐标,纹理查找结果等。布尔型向量可以用于数字类型向量的分量比较。以下是一些例子:

vec2 texcoord1, texcoord2;
vec3 position;
vec4 myRGBA;
ivec2 textureLookup;
bvec3 less;
向量可以通过构造函数进行初始化,一会儿再讨论这个。


4.1.6矩阵

OpenGL着色器语言有 2×2, 2×3, 2×4, 3×2, 3×3, 3×4, 4×2, 4×3,和 4×4的内置浮点型矩阵类型。以mat开头的矩阵类型使用单精度,而以dmat开头的为双精度。类型中的第一个数字指代列数,第二个数字指代行数,如果只有一个数字,说明这个矩阵是方形矩阵。矩阵的声明方式如下:

mat2 mat2D;
mat3 optMatrix;
mat4 view, projection;
mat4x4 view; // 声明mat4变量的另一种方式。
mat3x2 m; // 一个有3列2行的矩阵
dmat4 highPrecisionMVP;
dmat2x4 dm

矩阵通过构造函数进行初始化(在5.4“构造函数”中进行描述),初始化是以列为主序的。


4.1.7不透明类型

不透明类型声明的变量对于其他对象是不透明的。这些对象可以通过内置的函数进行访问,而不是直接对这些声明了的变量进行读或写操作。他们只能被声明为函数参数或者声明为uniform限制的变量。唯一一种有内存限定符的不透明类型为图片类型。除了数组索引,结构体成员选择和括号语法,不透明变量不允许在表达式中被计算,这样的使用会导致一个编译期的错误。


不透明类型变量不可以被当做1值;因此不能被用作 out或inout形式的函数参数,也不可以被赋值。任何以上使用,都会导致一个编译期错误。然而他们可以被当做in参数被传递,他们也不可以在声明时被初始化

一个不透明类型声明 有效的声明了两个对象,一个不透明句柄本身,一个对于对象的句柄,有两个预留的限定符,一个空间限定符,一个内存限定符。空间限定符将限制不透明句柄,而内存限定符将限制对于对象的句柄。


4.1.7.1 采样器

采样器类型(例如 sampler2D)是不透明类型,像上面对不透明类型描述的那样进行声明和表现。当被组装进一个着色器中的数组里时,采样器只可以通过一个动态uniform整式进行查找,否则将返回undefined

采样器变量用于处理 1 2 3维纹理,立方体贴图,深度贴图(阴影)等等,如基本类型表中枚举的一样。每个纹理目标有不同的采样器类型,每个都有float,integer,unsigned integer数据类型。纹理通过内置纹理函数进行访问(在8.9”纹理函数“中进行描述)然后采样器用于指定访问哪个纹理和如何过滤它。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值