我正在将一个GL_TEXTURE_3D传递给iOS应用程序中的片段着色器。我使用缩小和放大滤波器作为GL_LINEAR的这种纹理。然而,在应用程序中呈现的纹理有块,而不是平滑的颜色转换,这意味着它正在使用GL_NEAREST插值。以下是预期与接收到的输出图像的截图


PS:如果我用2D纹理代替,将3D纹理作为扁平的2D纹理传递,并在着色器中手动进行插值,这一切都很好,我得到了预期的输出。
下面是设置GL_LINEAR的代码
GLenum target, minificationFilter, magnificationFilter;
target = GL_TEXTURE_3D;
minificationFilter = GL_LINEAR;
magnificationFilter = GL_LINEAR;
glTexParameteri(target, GL_TEXTURE_MIN_FILTER, minificationFilter);
glTexParameteri(target, GL_TEXTURE_MAG_FILTER, magnificationFilter);发布于 2015-11-27 23:55:08
发布于 2015-11-26 01:38:12
如果您从单精度浮点格式的GL_RGBA32F切换到半浮点格式的GL_RGBA16F,那么GL_LINEAR放大镜可以正常工作。
我找不到任何文档来说明为什么不应该这样做,对单一精度浮点纹理的唯一限制似乎是当用作呈现目标时,所以我猜这是一个在"GL_RGBA32F忽略GL_LINEAR放大镜on iOS 9“下归档的bug。
如果它真的是一个bug,那么请理解--我认为OpenGLES 3实现是最大的、最可怕的开关语句驱动的代码之一,可能会有不幸发生。如果你认为这份工作之前可能带来的任何魅力,自那以后就被更快、更性感、更无遗产的金属的发布所吞噬,那么你可能是在谈论一个非常不受欢迎的代码基,由一些非常不快乐的人来维护。你是幸运的平阴影三角形甚至工作。
附注:使用GL_TEXTURE_3D时,不要忘记在第三个坐标(GL_TEXTURE_WRAP_R)中夹紧
p.p.s在一个设备上测试这个。GL_RGBA32F和GL_RGBA16F似乎都没有在模拟器上与GL_LINEAR一起工作。
https://stackoverflow.com/questions/33883589
复制相似问题