【问题标题】:why are integer UV coordinates needed for fetching multisampled texture为什么获取多重采样纹理需要整数 UV 坐标
【发布时间】:2013-08-24 04:59:45
【问题描述】:

在对多重采样纹理进行采样时,我们必须使用整数坐标,即

ivec2 Texcoord = ivec2(textureSize(texsampler) * In.Texcoord);
vec4 color = texelFetch(texsampler, Texcoord, i);  //i = sample, Texcoord is integer 

而不是

vec4 color = texture(texsampler, txcooord);  //txcoord is float between [0,1]

为什么我们需要映射到每个纹素的精确整数坐标?为什么我的 UV 坐标不能在 0.0 到 1.0 之间浮动。我猜这与多重采样纹理存储在内存中的方式有​​关。但整个想法对我来说有点模糊。

我在这里看到了一个类似的问题:Multisample texture sampling,但这不是我想要的。

【问题讨论】:

    标签: opengl texture-mapping multisampling


    【解决方案1】:

    在这里使用标准化值有什么意义?多样本纹理不允许在纹素之间进行过滤,因为当纹素可以有多个值时,过滤没有意义。由于您只能访问特定的纹素,以及这些纹素的特定样本,因此他们认为强迫您具体说明您想要的纹素是没有害处的。

    他们可以允许标准化值吗?当然。你可以自己这样做:

    vec4 textureMS(in sampler2DMS tex, in vec2 texCoord, in int sampleIx)
    {
      ivec2 textureSize = textureSize(tex);
      ivec2 texelCoords = ivec2(textureSize * clamp(texCoord, 0.0, 1.0));
      return texelFetch(tex, texelCoords, sampleIx);
    }
    

    但这需要实现提供纹理的大小,这可能意味着将其作为内部制服或其他东西传递。那只会让事情花费更长的时间。由于您可以相当轻松地自己完成,因此他们只提供了 fast 方式。这样,能用快的人就不会不小心被慢的方法困住了。

    【讨论】:

    • 谢谢。很有道理。
    猜你喜欢
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    相关资源
    最近更新 更多