目前我使用texture(...)
函数读取3D纹理,代码如下:
vec3 value = texture(texture_3D, coord).rgb
现在我想改用texelFetch(texture_3D, coord, 0).xyz
来读取纹理,但我不知道如何转换我的坐标以使其与texelFetch
兼容。我的纹理大小为256x256x256
。
当前的坐标计算方法如下:
vec3 min_box = vec3(-0.5);
vec3 max_box = vec3(0.5);
vec3 coord = worldToVolume(world_pos, min_box, max_box)
vec3 worldToVolume(world_pos, min_box, max_box) {
return (world_pos - min_box) / (max_box - min_box)
}
有什么想法吗?如果需要更多信息,请询问,我会提供的。
texelFetch
选项而不是texture()
,有什么大的区别呢?当使用texelFetch
时,我不必关心是否使用GL_NEAREST
或GL_LINEAR
。 - user4911648texelFetch
是一个不错的选择。如果您具有归一化浮点纹理坐标,并且必须显式知道纹理大小(或使用textureSize
进行查询),那么这似乎是一种糟糕的方法。一种方法是您不必关心过滤,而另一种方法是您不必关心纹理大小。哪种更方便就用哪个吧。 - Christian Rau