使用OpenGL模糊?

时间:2010-07-17 03:08:15

标签: c++ c opengl

我正在使用OpenGL并在2D视图中绘制多边形。我怎么能模糊一个多边形,而不使用glsl,只有像模板缓冲区和东西。感谢

2 个答案:

答案 0 :(得分:4)

有两种快速而肮脏的方式。到目前为止,GLSL或Cg是你最好的解决方案,特别是如果你需要任何体面的模糊(高斯,盒子,运动等)。但是,您可以:

  • 以较低的分辨率渲染图像,通常是纹理,然后以高分辨率将该纹理渲染到屏幕上。它会模糊图像,但你需要使用三线性或各向异性过滤才能看起来很好看。通常它仍然不会,但那些帮助。
  • 将图像渲染为纹理,渲染一次至完全不透明度的屏幕,然后打开混合,调低alpha,然后渲染图像向左移动一点,向右移动一点,向上移动一点,向下移动一点......您需要在前面渲染中使用低不透明度,但它们会有效地模糊场景。您可能还想使用混合模式,SrcColor / InvSrcColor或DstColor / InvDstColor可能会有所帮助。

有几种方法可以在没有着色器的情况下执行此操作,但没有一种方法是最佳的。

答案 1 :(得分:4)

普通方法使用累积缓冲区而不是模板缓冲区。您基本上会多次重绘多边形,但每次都会稍微改变视角。你改变的确切地决定了你得到的模糊风格。例如,如果您想要缩放相机镜头等效果,则可以在帧之间略微更改视锥体。如果想要运动模糊,请改为改变摄像机视角。通过一些额外的工作,你可以做一些略微奇怪的效果,例如向前移动你的视点,同时缩放,所以(大部分)场景保持大致相同的大小,但你正在查看的视角它不断变化。