【发布时间】: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