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,表明打包时截掉的范围无法靠解包恢复。