【问题标题】:Rendering from to a texture from an FBO causes blurring从 FBO 渲染到纹理会导致模糊
【发布时间】:2014-03-17 03:13:54
【问题描述】:

我正在尝试在 iOS 上使用 OpenGL ES2 创建一个照片编辑程序。我希望能够使用片段着色器修改照片的某些部分。例如,如果用户触摸屏幕,该点将被发送到片段着色器。片段着色器将在点的某个半径内添加效果。

我需要将片段着色器中所做的修改保留到下一帧。我读过这样做的方法是设置与纹理相关联的第二个帧缓冲区对象。以下是程序的作用:

当前纹理是 0 吗?如果是这样,这是第一次绘制,所以我们将照片绘制到 FBO(即将纹理投影到 2D 矩形上)。然后将矩形重新绘制到屏幕上,但这次使用 FBO 作为纹理源。之后,我们将 FBO 的纹理绘制回 FBO。

if(_currentTextureID == 0) 
    _currentTextureID = _imageTexture
else 
    _currentTextureID = _frameBufferTextureID;

glBindFrameBuffer(GL_FRAMEBUFFER, _frameBufferID)
[self drawTexture: _currentTextureID];

[self bindDrawable]   
[self drawTexture: _currentTextureID];

这种工作,但由于多次调用 draw 方法,图像变得模糊。我认为这可能是因为您无法将纹理渲染到它自己的 FBO 中,所以我尝试了两个 FBO,但这也不起作用。我对 OpenGL 还很陌生,所以任何建议都将不胜感激!

这里是完整源代码的链接:

Source Code

【问题讨论】:

    标签: ios opengl-es opengl-es-2.0 framebuffer texture2d


    【解决方案1】:

    事实证明,问题出在片段着色器中。以前,纹理坐标被表示为 lowp vec2。当我将其更改为 highp vec2 时,问题就消失了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多