GLSL 内置函数

unpackSnorm2x16()

把一个 uint 解包为两个带符号归一化值。

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

函数签名

vec2 unpackSnorm2x16(uint p)

参数

p
打包后的无符号整数

返回值

一个位于 [-1, 1] 的 vec2,由两个有符号 16 位字段解码得到,低位字段对应 x。

在线示例

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

unpackSnorm2x16 做什么

把一个 uint 解包为两个带符号归一化值。

看懂预览

有符号归一化数据解包后,左侧恢复负 x,右侧恢复正 x。把 .x 换成 .y,背景渐变就会转为纵向。

核心调用

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

解包值有有限精度,不能要求与原始小数精确相等。

修改实验

在 unpackSnorm2x16 之前,把打包输入改为 vec2(x*3.0,y)。解码后的斜坡会停在 -1 与 1,表明打包时截掉的范围无法靠解包恢复。

规范

GLSL ES 3.00 built-in functions, chapter 8

相关函数