gpt4 book ai didi

opengl - 为什么获取多重采样纹理需要整数 UV 坐标

转载 作者:行者123 更新时间:2023-12-01 16:00:26 27 4
gpt4 key购买 nike

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

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 之间 float 。我猜这与多重采样纹理在内存中的存储方式有关。但整个想法对我来说有点模糊。

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

最佳答案

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

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

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);
}

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

关于opengl - 为什么获取多重采样纹理需要整数 UV 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18415095/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com