首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于texture3D的OpenGL ES 3.0中的插补

基于texture3D的OpenGL ES 3.0中的插补
EN

Stack Overflow用户
提问于 2015-11-24 00:51:13
回答 2查看 1.1K关注 0票数 0

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

PS:如果我用2D纹理代替,将3D纹理作为扁平的2D纹理传递,并在着色器中手动进行插值,这一切都很好,我得到了预期的输出。

下面是设置GL_LINEAR的代码

代码语言:javascript
运行
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-27 23:55:08

在ES3.0中不支持内部格式GL_RGBA32F的纹理线性过滤。

您可以在ES3.0规范文档的表3.13中看到哪种格式支持线性过滤,即第130-132页。最后一列,带有标题“纹理-可过滤”,指示哪种格式支持过滤。RGBA32F在该列中没有复选标记。

如果您需要对浮动纹理进行线性滤波,则只能使用16位组件浮点数。同一表中的RGBA16F在最后一列中有复选标记。

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

有一个扩展可以取消这个限制:线性。但是,这个扩展没有在支持iOS的扩展中列出。

票数 1
EN

Stack Overflow用户

发布于 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_RGBA32FGL_RGBA16F似乎都没有在模拟器上与GL_LINEAR一起工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33883589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档