3

マルチサンプリングは、 3D アプリケーションでフルスクリーン アンチエイリアシング(FSAA) を適用する方法です。現在wxWidgets GUIに組み込まれている OpenGL プログラムでマルチサンプリングを使用する必要がありますこれを行う方法はありますか?これを達成するための詳細な手順を知っている場合にのみ回答してください。

WGL (OpenGL の Win32 拡張機能) を使用してマルチサンプリングを有効にしていることは認識しています。ただし、私の OpenGL プログラムは MFC で書かれていないため (そしてコードをマルチプラットフォームで移植できるようにしたいので)、それは私にとって選択肢ではありません。

4

1 に答える 1

4

最後に、wxWidgets OpenGL プログラムでマルチサンプリングが機能するようになりました。ちょっと面倒ですが、やり方は以下の通りです。

wxWidgetsは現在、安定版リリースでマルチサンプリングをサポートしていません(現時点での最新バージョンは2.8.8です)。ただし、パッチとして、また毎日のスナップショットからも入手できます。(後者は、パッチが受け入れられ、問題がなければ後の安定版リリースに表示されることを意味するため、心強いものです。)

したがって、2 つのオプションがあります。

  1. 毎日のスナップショットからダウンロードしてビルドします。

  2. 作業中の wxWidgets インストール用のパッチを入手してください。

作業中のインストールをできるだけ邪魔したくないので、2番目のオプションの方が面倒ではありません。Windows でパッチを適用する方法がわからない場合は、このを参照してください。

少なくとも、Windows の場合、パッチは次のファイルを変更します。

$(WX_WIDGETS_ROOT)/include/wx/glcanvas.h
$(WX_WIDGETS_ROOT)/include/wx/msw/glcanvas.h
$(WX_WIDGETS_ROOT)/src/msw/glcanvas.cpp

パッチを適用した後、wxWidgets ライブラリを再コンパイルします。

wxWidgets OpenGL プログラムでマルチサンプリングを有効にするには、コードを少し変更する必要があります。

属性リストをwxGLCanvasコンストラクターに渡す必要があります。

int attribList[] = {WX_GL_RGBA,
                    WX_GL_DOUBLEBUFFER,
                    WX_GL_SAMPLE_BUFFERS, GL_TRUE, // Multi-sampling
                    WX_GL_DEPTH_SIZE, 16,
                    0, 0};

すでに属性リストを使用している場合は、 with の行をそれに追加しGL_SAMPLE_BUFFERS, GL_TRUEます。それ以外の場合は、この属性リストの定義をコードに追加してください。

次に、wxGLCanvas コンストラクターを変更して、この属性リストをパラメーターとして受け取ります。

myGLFrame::myGLFrame    // Derived from wxGLCanvas
(
    wxWindow *parent,
    wxWindowID id,
    const wxPoint& pos,
    const wxSize& size,
    long style,
    const wxString& name
)
: wxGLCanvas(parent, (wxGLCanvas*) NULL, id, pos, size, style, name, attribList)
{
    // ...
}

wxGLCanvas 要素が作成されると、デフォルトでマルチサンプリングがオンになります。自由に無効または有効にするには、関連する OpenGL 呼び出しを使用します。

glEnable(GL_MULTISAMPLE);
glDisable(GL_MULTISAMPLE);

マルチサンプリングが wxWidgets OpenGL プログラムで動作するようになりました。うまくいけば、すぐに wxWidgets の安定版リリースでサポートされるはずなので、この情報は関係ありません :-)

于 2008-08-22T09:13:56.527 に答える