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

sampler2DRect与sampler2D的区别是什么?如何构造结果不同的场景?

sampler2D 与 sampler2DRect 的核心区别
  • 坐标体系本质不同:

    • sampler2D 使用归一化坐标,范围固定为 [0, 1],和图像实际分辨率无关,比如 (0,0) 对应图像左上角,(1,1) 对应右下角。
    • sampler2DRect 使用像素坐标,范围是 [0, 图像宽度) × [0, 图像高度),坐标值直接对应像素的实际位置,比如256×256的图像,有效坐标上限是(255,255)。
  • 采样功能支持差异:

    • sampler2D 支持mipmap采样、各向异性过滤,还能通过bias参数调整mipmap采样层级;
    • sampler2DRect 完全不支持mipmap,只能采样图像的基础层级,因此函数签名里没有bias参数。
能得到不同结果的测试场景

场景1:用相同数值的坐标采样

假设绑定的图像是256×256分辨率:

  1. 用sampler2D传入(0.5, 0.5),采样的是图像中心区域的像素;
  2. 用sampler2DRect传入同样的(0.5, 0.5),采样的是图像左上角的第一个像素(坐标小于1,对应像素(0,0)附近)。
    两者采样结果必然不同。

场景2:开启mipmap的情况

  1. 给sampler2D绑定带多级mipmap的图像,采样时添加bias参数,比如texture(sampler2D_obj, vec2(0.5,0.5), 2.0),此时会采样第2级mipmap;
  2. 用sampler2DRect绑定同一图像,哪怕图像有mipmap层级,也只会采样第0级基础图,结果自然不同。

场景3:坐标超出有效范围时

  • sampler2D 对[0,1]外的坐标,会按sampler设置的地址模式(重复、镜像、clamp等)处理,比如(2.0,2.0)在重复模式下等价于(0,0);
  • sampler2DRect 对超出像素坐标范围的数值,默认返回透明黑(具体实现可能略有差异,但不会像sampler2D那样做地址模式处理)。
    这种情况下两者输出结果完全不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 14:39:52