5

NVIDIA カードでは、次のような累積バッファを使用してフル シーンのアンチエイリアシングを実行できます。

if(m_antialias)
{
    glClear(GL_ACCUM_BUFFER_BIT);
    for(int j = 0; j < antialiasing; j++)
    {
        accPerspective(m_camera.FieldOfView(), // Vertical field of view in degrees.
            aspectratio, // The aspect ratio.
            20., // Near clipping
            1000.,
            JITTER[antialiasing][j].X(), JITTER[antialiasing][j].Y(),
            0.0, 0.0, 1.0);

        m_camera.gluLookAt();

        ActualDraw();

        glAccum(GL_ACCUM, float(1.0 / antialiasing));

        glDrawBuffer(GL_FRONT);
        glAccum(GL_RETURN, float(antialiasing) / (j + 1));
        glDrawBuffer(GL_BACK);
    }

    glAccum(GL_RETURN, 1.0);
}

ATI カードではアキュムレーション バッファは実装されておらず、シェーダー言語で実装できると誰もが言っています。もちろん、それに関する問題は、GLSL が OpenGL の初心者にとって非常に高い参入障壁であることです。

ATI カードで行うことができ、初心者が理解できる方法でシーン全体のアンチエイリアシングを行う方法を教えてくれるものを誰か教えてもらえますか?

4

1 に答える 1

14

蓄積バッファーがあるかどうかに関係なく、なぜこのようにアンチエイリアシングを行うのでしょうか? マルチサンプリングを使用するだけです。無料ではありませんが、あなたがしていることよりもはるかに安いです。

最初に、マルチサンプル バッファを使用してコンテキストを作成する必要があります。これは、 WGL/GLX_ARB_multisampleを使用する必要があることを意味します。つまり、Windows では、 2 段階のコンテキスト作成を行う必要があります。*_SAMPLE_BUFFERS_ARB1といくつかの のピクセル形式をリクエストする必要があり*_SAMPLES_ARBます。サンプル数が多いほど、アンチエイリアシングは向上します (遅くなります)。wglGetPixelFormatAttribfvまたはを使用して、サンプルの最大数を取得できますglXGetConfig

マルチサンプル フレームバッファを使用してコンテキストを正常に作成したら、1 つの例外を除いて通常どおりにレンダリングしglEnable(GL_MULTISAMPLE)ます。セットアップ コードを呼び出します。これにより、マルチサンプル レンダリングが有効になります。

そして、それはあなたが必要とするすべてです。

あるいは、GL 3.x を使用している場合、またはARB_framebuffer_objectにアクセスできる場合は、コンテキストをスキップしてマルチサンプリング フレームバッファを作成できます。深度バッファーとカラー バッファーは、すべて同じ数のサンプルを持つ必要があります。これらにはレンダー バッファを使用することをお勧めします。これは、まだ固定機能を使用しているからです (また、固定機能パイプラインでマルチサンプル テクスチャからテクスチャを作成することはできません)。

色と深度用にマルチサンプリングされたレンダーバッファーを作成します (同じ数のサンプルが必要です)。それらを FBO に設定しglEnable(GL_MULTISAMPLE)、(もちろん を使用して) それらにレンダリングします。glBlitFramebuffer完了したら、マルチサンプル フレーム バッファからバック バッファ (マルチサンプルしてはならない) にブリットするために使用します。

もちろん、それに関する問題は、GLSL が OpenGL の初心者にとって非常に高い参入障壁であることです。

誰が言ったのですか?初心者がシェーダーから学ぶことに何の問題もありません。実際、私の経験では、そのような初心者は、何が起こっているかの詳細をより効果的に理解しているため、よりよく学ぶことがよくあります.

于 2012-05-09T02:23:22.013 に答える