2009-07-03 106 views
5

我正在考虑将运动模糊加入到我的2D程序中,但我怀疑当前算法的结果。2D运动模糊解决方案

我的做法是这样的时刻:

  • 绘制到后备缓冲。
  • 当时间到 更新前缓冲器,共混 后备缓冲到前缓冲器。
  • 重复

什么会导致“运动模糊”效果明显的混合,如运动中的物体会留下一个衰落的踪迹。

这显然不是很对硬件要求很高,双缓冲无论如何都会被完成,唯一的额外步骤是alpha混合,这是一个简单的计算。然而,这些路径将非常锐利,而且看起来有点奇怪,并不模糊。在混合步骤之前,我可以在后台缓冲区中做一个盒子模糊处理,但是感觉它可能会对像Nintendo DS这样的低端系统造成严重的负担。

是否有让我更有效地做到这一点还是得到更好看结果的任何解决方案?

回答

5

真的是你应该呈现许多中间帧,并将它们融入到一个结果。例如说,你的输出帧率是50 fps。如果您以500 fps的速度内部渲染并将10帧的组合在一起,然后再向用户显示,您可能会得到合理的结果。

您现在使用的方法模拟持久性,就好像您正在使用慢荧光粉进行陈旧显示。这与运动模糊不同。如果你的帧持续时间是20ms(1000/50),那么运动模糊帧由跨越帧持续时间20ms的渲染组成,全部使用相同的alpha权重。持续性解决方案由20,40,60,80,100毫秒前的渲染组成,逐渐淡出。

1

它可能不是非常尖锐的。这完全取决于所使用的混合功能。例如,前一张/当前图像的0.1/0.9分别会提供一些微弱的痕迹。

我想补充一点,这基本上是在OpenGL模糊运动是如何完成(通过累加缓冲器)

+0

感谢您的意见。很高兴知道我的想法不是太业余:) – Skurmedel 2009-07-03 13:46:59

1

有更有效地做到这一点,据我所知没有真正的方法。这就和它的效率一样。如果帧频良好并且移动不太清晰,它看起来相当不错。

最好看的计划将是为每个像素,从新位置到老位置画一个半透明线。然而,这不是一个简单的计算。

+0

我应该补充说,即使这个更好看的计划将看起来错误,如果在帧之间的对象没有线性移动。 – Goz 2009-07-03 13:36:00

+0

谢谢。 Goz并不认为这是一个有趣的想法。如果后缓冲区的不透明度很低,如果一个对象在一帧中从一端到另一端进入另一端,看起来可能很奇怪。 – Skurmedel 2009-07-03 13:45:45