OpenGL ES上的运动模糊实现

时间:2012-03-13 07:02:17

标签: objective-c opengl-es render-to-texture motion-blur

我是OpenGL ES 1.1(用于IOS)纹理的新手,我遇到了制作运动模糊效果的问题。在谷歌搜索期间,我发现我应该在不同的时刻将我的场景渲染到几个纹理,然后在屏幕上使用不同的alpha值绘制所有这些纹理。但问题是我不知道如何实现这一切!所以,我的问题是:

  1. 如何在屏幕上绘制2D纹理?我应该制作一个正方形并将纹理放在上面吗?或者可能是,有一种方法可以直接在屏幕上绘制纹理?
  2. 如何在屏幕上使用不同的alpha值绘制多个纹理(一个在另一个上)?
  3. 我已经提出了一些想法,但我不确定它们是否正确。 提前谢谢!

1 个答案:

答案 0 :(得分:2)

当然,第一个建议是,在尝试进行高级操作之前先了解基础知识。除此之外:

  1. 是的确,要绘制全屏纹理,您只需绘制纹理屏幕大小的四边形。在这种情况下,正交投影将是一个好主意,使四边形的屏幕对齐和适当的尺寸更容易。为了首先获取纹理(通过渲染它们),FBOs可能会有所帮助,但我不确定ES 1设备是否支持它们,否则好的glCopyTexSubImage2D会做也是,虽然需要复制操作。

  2. 好吧,你只需要绘制多个纹理四边形(见1)。您可以配置texture environment以使用四边形的基色(glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE))缩放纹理的颜色,并为您的四边形提供(1, 1, 1, alpha)的颜色(当然应禁用光照)。此外,您必须启用alpha blendingglEnable(GL_BLEND))并使用适当的混合功能(glBlendFunc(GL_SRC_ALPHA, GL_ONE)应该执行此操作)。

  3. 但是,如果所有这些术语都没有告诉你任何事情,那么在深入研究更高级的效果之前,你应该先使用一个好的学习资源来学习基础知识。