【问题标题】:Interpolation in texture3D in OpenGL ES 3.0 on iOSiOS 上 OpenGL ES 3.0 中的 texture3D 插值
【发布时间】:2016-02-26 07:11:52
【问题描述】:

我将 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);

【问题讨论】:

  • 你能显示你设置GL_LINEAR的代码吗?
  • @RhythmicFistman:我编辑了帖子以包含代码。感谢您的提问。
  • 那些块相当大。会不会是纹理量化?你是如何上传纹理的?
  • 我怀疑由于纹理量化,块很大。 3D 纹理大小为 17x17x17,它显示在大小为 300 x 225 的 glkView 中 - 我认为这是块很大的原因。由于我只显示 3D 纹理的一部分,您会注意到有 17x17 块。
  • 我正在上传纹理,方法是将NSArray 中的数据放入GLfloat *texels,然后使用glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA32F, 17, 17, 17, 0, GL_RGBA, GL_FLOAT, texels); 将这些纹素上传到纹理中

标签: ios opengl-es textures texture-mapping


【解决方案1】:

ES 3.0 不支持对内部格式为 GL_RGBA32F 的纹理进行线性过滤。

您可以在 ES 3.0 规范文档第 130-132 页的表 3.13 中查看哪些格式支持线性过滤。最后一列,标题为“Texture-filterable”,表示哪些格式支持过滤。 RGBA32F 在该列中没有复选标记。

如果您需要对浮点纹理进行线性过滤,则只能使用 16 位分量浮点数。同一张表中的RGBA16F在最后一列有勾号。

这个限制在最新的 ES 3.2 规范中仍然存在。

有一个扩展可以解除这个限制:OES_texture_float_linear。但是,此扩展名并未列在supported extensions on iOS 下。

【讨论】:

  • RGBA32F 切换到RGBA16F 似乎对我有用。感谢您的详细解释并指出文档中的参考。
【解决方案2】:

如果您从单精度浮点格式GL_RGBA32F 切换到半浮点格式GL_RGBA16F,则GL_LINEAR 放大效果很好。

我找不到任何文档来说明为什么这不应该工作,并且单精度浮点纹理的唯一限制似乎是用作渲染目标时,所以我想这是一个要在“@ 987654325@ 在 iOS 9" 上忽略 GL_LINEAR 放大倍数。

如果它真的一个错误,那么请理解 - 我认为OpenGLES 3 实现是可能拥有的最大、最糟糕的开关语句驱动的代码片段之一工作的不幸。如果你认为这项工作之前可能带来的任何魅力已经被更快、更性感和无遗留Metal 的发布所吸走,那么你可能在谈论一个非常不受欢迎的代码库,由一些非常不开心的人维护. 你很幸运,扁平阴影三角形甚至可以工作

附言使用GL_TEXTURE_3D时不要忘记夹在第三坐标(GL_TEXTURE_WRAP_R

p.p.s 在设备上进行测试。 GL_RGBA32FGL_RGBA16F 似乎都不适用于模拟器上的 GL_LINEAR

【讨论】:

  • 我会试用 GL_RGBA16F 并回复您。 PS - 我正在夹住第三个坐标:) 我正在设备上对其进行测试。我同意模拟器不是很可靠。
  • GL_RGBA16F 而不是 GL_RGBA32F 与 GL_LINEAR 配合得很好。谢谢!
猜你喜欢
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
相关资源
最近更新 更多