Ich habe gerade mit OpenGL-Programmierung begonnen und ich baue eine Clock-Anwendung. Ich möchte, dass es so einfach aussieht: Ссылка
Meine Anwendung sieht jedoch sehr "un-anti-aliased" aus: Ссылка
Ich habe die GL_SMOOTH_POLYGON-Methode ausprobiert, die im Red Book erwähnt wird. Das scheint jedoch nichts zu tun.
Ich arbeite an einem Laptop mit integrierter Grafik von Intel. Die Karte unterstützt nicht Dinge wie GL_ARB_multisample.
Was sind meine Möglichkeiten an dieser Stelle meiner App anti-aliased?
Intel integrierte Videokarten sind berüchtigt für ihre fehlende Unterstützung für OpenGL-Antialiasing. Sie können das aber umgehen.
Erste Option: Manuelles Supersampling
Mache eine Textur, die 2x mal so groß ist wie der Bildschirm. Rendern Sie Ihre Szene über FBO in die Textur und rendern Sie die Textur dann mit halber Interpolationsbreite in halber Größe. Kann sehr langsam sein (in komplexen Szenen) aufgrund der 4x Vergrößerung der zu zeichnenden Pixel.
führt zu schwachem Antialiasing (daher empfehle ich es nicht für Desktop-Software wie Ihre Uhr). Überzeugen Sie sich selbst:
Zweite Option: (erweitert)
Verwenden Sie einen Shader, um Morphologisches Antialiasing auszuführen. Dies ist eine neue Technik und ich weiß nicht, wie einfach es zu implementieren ist. Es wird von einigen fortgeschrittenen Spielen verwendet.
Dritte Option:
Verwenden Sie Texturen und bilineare Interpolation zu Ihrem Vorteil, indem Sie OpenGL-Primitive über Texturen emulieren. Die Technik wird hier beschrieben.
Vierte Option: Verwenden Sie für jedes Element Ihrer Uhr eine separate Textur.
Verwenden Sie zum Beispiel für Ihren Stundenpfeil kein flaches, schwarzes GL_POLYGON in der Form Ihres Pfeils. Verwenden Sie stattdessen einen gedrehten GL_QUAD, der mit einem in einem Bildprogramm gezeichneten Stundenpfeilbild strukturiert ist. Die bilineare Interpolation sorgt dann für Antialiasing, wenn Sie es drehen.
Diese Option würde die geringste Anstrengung erfordern und sieht sehr gut aus.
Fünfte Option:
Verwenden Sie eine Bibliothek, die Software-Rendering unterstützt -
Solche Bibliotheken enthalten ihre eigenen Algorithmen für das Antialiasing-Rendering, so dass sie für das Antialiasing nicht von Ihrer Grafikkarte abhängig sind. Die Vorteile sind:
Der Nachteil ist eine viel schlechtere Leistung, aber das ist für eine Clock-App überhaupt nicht von Belang, und sie dreht sich um, wenn man die von mir erwähnte Intelligent-Redrawing-Funktionalität berücksichtigt.
Für so etwas wie eine Uhr-App wird die fünfte Option sehr empfohlen. OpenGL ist hauptsächlich nützlich für Spiele, 3D-Software und intensive grafische Inhalte wie Musik-Visualisierer. Für Desktop-Apps ist es zu niedrig und die Implementierungen unterscheiden sich zu sehr.
Zeichnen Sie es in ein Framebuffer-Objekt mit zwei (oder mehr) der endgültigen Auflösung und verwenden Sie dieses Bild dann als Textur für ein einzelnes Quad, das im aktuellen Fenster gezeichnet wird.
Tags und Links c++ opengl antialiasing