Frage

Multisampling ist eine Art der Bewerbung Vollbild-Anti-Aliasing (FSAA) in 3D-Anwendungen.Ich muss Multisampling in meinem OpenGL-Programm verwenden, das derzeit in ein eingebettet ist wxWidgets GUI.Gibt es eine Möglichkeit, dies zu tun?Bitte antworten Sie nur, wenn Sie die detaillierten Schritte kennen, um dies zu erreichen.

Mir ist bekannt, dass ich Multisampling mit aktivieren kann WGL (Win32-Erweiterungen für OpenGL).Da mein OpenGL-Programm jedoch nicht in MFC geschrieben ist (und ich möchte, dass der Code auf mehrere Plattformen portierbar ist), ist das für mich keine Option.

War es hilfreich?

Lösung

Endlich habe ich Multisampling mit meinem wxWidgets OpenGL-Programm zum Laufen gebracht.Im Moment ist es etwas chaotisch, aber so geht's:

wxWidgets nicht hat Multisampling Unterstützung in ihrem stabile Veröffentlichungen gerade jetzt (aktuellste Version ist 2.8.8).Es ist jedoch als Patch und auch über den täglichen Snapshot verfügbar.(Letzteres ist ermutigend, da es bedeutet, dass der Patch akzeptiert wurde und in späteren stabilen Versionen erscheinen sollte, wenn es keine Probleme gibt.)

Es gibt also zwei Möglichkeiten:

  1. Laden Sie es herunter und erstellen Sie es täglicher Schnappschuss.

  2. Bekommen das Patch für Ihre funktionierende wxWidgets-Installation.

Ich empfand die zweite Option als weniger umständlich, da ich meine funktionierende Installation möglichst nicht stören möchte.Wenn Sie nicht wissen, wie man unter Windows patcht, lesen Sie Das.

Zumindest für Windows werden durch den Patch die folgenden Dateien geändert:

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

Nach dem Patchen neu kompilieren die wxWidgets-Bibliotheken.

Um Multisampling in Ihrem wxWidgets OpenGL-Programm zu aktivieren, sind geringfügige Änderungen am Code erforderlich.

Eine Attributliste muss an übergeben werden wxGLCanvas Konstrukteur:

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

Wenn Sie bereits eine Attributliste verwendet haben, fügen Sie die Zeile mit hinzu GL_SAMPLE_BUFFERS, GL_TRUE dazu.Andernfalls fügen Sie diese Attributlistendefinition Ihrem Code hinzu.

Ändern Sie dann Ihren wxGLCanvas-Konstruktor so, dass er diese Attributliste als Parameter verwendet:

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)
{
    // ...
}

Nachdem das wxGLCanvas-Element erstellt wurde, ist Multisampling standardmäßig aktiviert.Um es nach Belieben zu deaktivieren oder zu aktivieren, verwenden Sie die entsprechenden OpenGL-Aufrufe:

glEnable(GL_MULTISAMPLE);
glDisable(GL_MULTISAMPLE);

Multisampling sollte nun mit dem OpenGL-Programm wxWidgets funktionieren.Hoffentlich sollte es bald in der stabilen Version von wxWidgets unterstützt werden, sodass diese Informationen irrelevant sind :-)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top