2009-07-03 37 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