You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenGL及WebGL2中纹理采样的坐标精度与格式问询

OpenGL纹理采样坐标的精度规则

核心结论

OpenGL(包括WebGL2)规范没有强制要求纹理采样坐标必须降级为定点数,但硬件/驱动的实际实现普遍存在精度限制,多数情况下会使用16位归一化无符号整数(UNORM16)处理采样坐标,这也是你观察到精度降级的原因。

分版本细节说明

1. WebGL2(基于OpenGL ES 3.0)

  • 当在着色器中使用texture(sampler, vTextureCoordinates)采样时,即使输入的是highp float精度的坐标,硬件采样单元通常会将其转换为16位UNORM格式进行处理。这是移动和桌面GPU采样单元的通用设计,平衡了性能与成本。
  • WebGL2规范允许实现使用更高精度(如32位浮点),但没有强制要求,因此不能依赖32位精度的采样行为。

2. 桌面OpenGL(3.0+)

  • 桌面OpenGL核心规范同样未强制规定采样坐标的精度下限,仅要求实现满足纹理过滤的误差范围要求。
  • 高端桌面GPU可能支持32位浮点坐标采样,但中低端GPU仍普遍采用16位UNORM处理,具体精度取决于硬件型号。

可依赖的规范保证行为

无论版本如何,以下行为是规范明确保证的:

  • 采样坐标的数学转换逻辑(从浮点归一化坐标到纹理像素位置的映射)严格符合规范定义,不会出现无规律的精度丢失。
  • 使用texelFetch进行整数纹理采样时,输入的整数坐标会被精确使用,不存在精度降级,因为这是直接访问纹理的具体像素。
  • 若硬件采用16位UNORM坐标,精度误差是可预测的:约为1/(2^16-1) ≈ 1.5259e-5,即每65535个纹理单位会产生1个像素的误差。

内容的提问来源于stack exchange,提问作者Doofus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 05:21:55