我正在尝试使用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];
这种工作,但由于多次调用绘制方法,图像变得模糊。我认为这可能是因为你无法将纹理渲染到它自己的FBO中,所以我尝试了两个FBO,但这也没有用。我是OpenGL的新手,所以任何建议都会非常感激!
以下是完整来源的链接:
答案 0 :(得分:0)
事实证明问题出在片段着色器中。以前,纹理坐标表示为lowp vec2。当我把它改成highp vec2时,问题就消失了。