GLSL 内置函数

packSnorm2x16()

把两个带符号归一化分量量化到一个 uint。

示例版本:GLSL ES 3.00 / WebGL 2示例阶段:片段

函数签名

uint packSnorm2x16(vec2 v)

参数

v
需要打包的分量

返回值

一个 uint,将 v 限制到 [-1, 1] 后存为两个有符号 16 位归一化编码,x 位于低位。

在线示例

修改右侧代码,左侧预览会实时更新。

packSnorm2x16 做什么

把两个带符号归一化分量量化到一个 uint。

看懂预览

打包再解包的表达式读取两个有符号归一化通道中的 x。把 vec2(x,y) 改成 vec2(x*2.0,y),就能看到超出 [-1, 1] 的输入被截住后形成的平坦两端。

核心调用

unpackSnorm2x16(packSnorm2x16(vec2(x,y))).x;

输入先夹紧到负一到一,压缩是有损量化。

修改实验

把 packSnorm2x16 的输入换成 vec2(-0.5,y)。第一个解码通道会从斜线变成接近 -0.5 的水平线。

规范

GLSL ES 3.00 built-in functions, chapter 8

相关函数