C++ 用OpenGL模糊?

C++ 用OpenGL模糊?,c++,c,opengl,C++,C,Opengl,我正在使用OpenGL并在二维视图中绘制多边形。我怎么能模糊一个多边形,没有使用glsl,只有像模具缓冲之类的东西。谢谢有两条捷径。GLSL或Cg是目前为止最好的解决方案,特别是如果你需要任何像样的模糊(高斯、方块、运动等)。但是,您可以: 以较低的分辨率渲染图像(通常为纹理),然后以高分辨率将该纹理渲染到屏幕上。这会使图像模糊,但需要使用三线性或各向异性过滤才能使其看起来良好。通常情况下,它仍然不会,但这些帮助 将图像渲染为纹理,以完全不透明度渲染一次屏幕,然后启用“混合”,调低alpha,

我正在使用OpenGL并在二维视图中绘制多边形。我怎么能模糊一个多边形,没有使用glsl,只有像模具缓冲之类的东西。谢谢

有两条捷径。GLSL或Cg是目前为止最好的解决方案,特别是如果你需要任何像样的模糊(高斯、方块、运动等)。但是,您可以:

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

在没有着色器的情况下,有几种方法可以做到这一点,但没有一种是最佳的

常规方法使用累积缓冲区而不是模具缓冲区。您基本上会多次重新绘制多边形,但每次都会稍微更改查看透视图。确切地说,您所更改的内容决定了所获得的模糊样式。例如,如果想要像缩放摄影机镜头这样的效果,可以在帧之间稍微更改视锥体。如果需要运动模糊,请改为更改摄影机视角。通过一些额外的工作,您可以执行一些看起来有些奇怪的效果,例如向前移动视点,同时向后缩放,因此(大部分)场景的大小大致保持不变,但您从中查看的视角会不断变化。

纹理贴图呢?您可以生成具有适当模糊外观边的正方形(alpha向边或其他方向减小),然后对多边形进行纹理贴图,使其边也逐渐消失。这只是内部模糊。不过,真正的模糊会延伸到多边形的边界之外。我当然不是OpenGL专家,但我敢打赌最简单的解决方案不包括GLSL。OpenSceneGraph有一个[Fog属性][],可以在状态集中启用。OSG是基于OpenGL(右??)的,所以应该有一种复制效果的方法。它必须在多边形之外模糊,因为a.已经有纹理。B.具有多边形轮廓。@cape1232:OpenGL具有雾功能,但(可能)不适用于此。基本上,你可以指定一种雾的颜色(通常是灰色),当物体离相机越来越远时,它会将更多的雾的颜色混合在一起,所以物体会“消失在远处”——这是为了给出深度提示,而不是为了模糊物体。要注意,使用累积缓冲可能会非常慢(都是因为必要的重画和许多消费级图形芯片组没有提供硬件加速累积缓冲)。@Greg:不幸的是,这是真的!