OpenGL简单模糊效果

时间:2012-06-10 13:11:29

标签: c++ opengl

我试图在太阳周围涂上一些模糊效果,给它一种发光效果。

我在这里使用这个方法:

http://nehe.gamedev.net/tutorial/radial_blur__rendering_to_a_texture/18004/

基本上,我绘制一个球体,它接受当前缓冲区并将其作为纹理抓取并重新绘制它多次,每次拉伸它。

当对象位于屏幕中央时,此功能非常有用。但是,我想让它偏右说,右上角。

这是我认为需要调整的主要部分:

glColor4f(1.0f, 1.0f, 1.0f, alpha);                 // Set The Alpha Value (Starts At 0.2)
            glTexCoord2f(0+spost,1-spost);                      // Texture Coordinate   ( 0, 1 )
            glVertex2f(0,0);                                    // First Vertex     (   0,   0 )

            glTexCoord2f(0+spost,0+spost);                      // Texture Coordinate   ( 0, 0 )
            glVertex2f(0,480);                                  // Second Vertex    (   0, 480 )

            glTexCoord2f(1-spost,0+spost);                      // Texture Coordinate   ( 1, 0 )
            glVertex2f(640,480);                                // Third Vertex     ( 640, 480 )

            glTexCoord2f(1-spost,1-spost);                      // Texture Coordinate   ( 1, 1 )
            glVertex2f(640,0);

对于我的生活,我无法弄清楚每次如何抵消它,以使模糊的图像不向右偏移。我知道整个屏幕都被捕获了,但是在绘制纹理时必须有一种方法可以抵消这种情况.....

如何?

2 个答案:

答案 0 :(得分:3)

对于您的问题,这可能不是直接的答案,但您不应过多关注通过固定管道的影响。 NeHE教程很好,但有点过时了。我建议您浏览基础知识并在代码中加入着色器。它们更快,并且可以让您更轻松地创建更复杂的效果。

答案 1 :(得分:0)

通常,如果你想围绕一个点(sx,sy)进行缩放,你需要翻译你的世界,使(sx,sy)位于原点,进行缩放,然后反向转换(sx) ,sy)回到最初的位置。