Also, ich hab mich mal schlaugemacht zu dem Thema und bei NeHe vorbeigeschaut. Dort gibt es ein C++ Tutorial zum Thema Multisampling. Dort habe ich für manche der angezeigten Objekte von Hand das Multisampling deaktiviert und für andere aktiviert. Es funktioniert tadellos - es ist also definitiv möglich, für einzelne Objekte das Multisampling (= FSAA) an und auszuschalten (über glEnable(GL_MULTISAMPLE_ARB)). Der Initialisierungsprozess des Multisamplings ist aber mit meinem momentanen Kenntnisstand viel zu kompliziert zu durchschauen und ich weiss noch nicht einmal, ob das überhaupt möglich ist zusammen mit SDL, schließlich wird hier am Pixelformat geschraubt. Aber da ich den Initialisierungsprozess nicht wirklich verstehe (ganz besonders nicht, was SDL genau tut) kann ich das nicht so richtig beantworten. Wenn man das Fenster ohne SDL initialisiert, kann man SDL (und z.B. dessen Events) bestimmt nicht trotzdem verwenden, oder?
Meine ersten Versuche, das Multisampling in meiner Delphi-Anwendung zu aktivieren, sind entsprechend auch kläglichst gescheitert. Naja, falls sich jemand von euch jetzt plötzlich nach diesem Exkurs für das Thema interessiert, wäre ich für Code natürlich sehr dankbar.
Insgesamt muss ich dir, SOS, allerdings widersprechen, dass es besser ist, das FSAA dem Benutzer über die Display-Eigenschaften zu überlassen. Erstens war das schon immer nur als Notlösung gedacht (für Anwendungen, die FSAA nicht unterstützen) und zweitens kann man sehr fein kontrollieren was genau anti-aliased wird und was nicht (macht z.B. bei gestückelten Texturen, Text und/oder Menüs und definitiv auch z.B. bei Billboards in 3D-Anwendungen durchaus Sinn).
Man kann ja immer noch einen Schalter im Setup-Programm einbauen, der FSAA für das Programm aktiviert oder deaktiviert und auch die Qualität setzt. Zugegeben, all das ist ein gewisser Extraaufwand, aber es ist auch irgendwie professioneller und man gewinnt eben diese "Detailkontrolle" - womit dann auch solches Gewurschtel wie der 2 Pixel-Rand mit Alphakanal entfällt. Versteh mich nicht falsch, das ist keine schlechte Lösung, aber besser ist es sicherlich, es gleich über die FSAA-Kontrolle "richtig" zu machen. Für 2D-Anwendungen ist es natürlich superklasse - bei Sprites/Texturen kann ich kein FSAA gebrauchen, für Linien, Polygone etc. hingegen schon.
MultiSampling <> FSAA - FSAA (Full Screen Antialiasing) kann ja schon per Definition nicht auf Primitiveebene funktionieren.
Multisampling ist eine Methode FSAA zu realisieren - es ist nicht die einzige, und es gibt noch andere Dinge, die man damit anstellen kann (u.a. mit den entsprechenden Extensions einzelne Primitive glätten).
Okay, dann habe ich die zwei Worte durcheinandergewürfelt, sorry.
Aber realisieren nicht aktuelle Grafikkarten ihr FSAA über Multisampling? Ich meine das FSAA, das man in den Display-Eigenschaften aktivieren kann (mit 2x, 4x, 8x, ...).
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Die meisten Karten ja. Die Parhelia z.B. nutzt Fragment Anti Aliasing, und die moderneren Radeons (9500 und besser) unterstützen unter MacOS (wegen anderer Treiberstruktur) auch noch Supersampling.
Was mich aber nach wie vor stört, ist die Tatsache das man selbst mit (w)gl_multisample_arb immernoch nicht genug Kontrolle über das AA hat. Da kann der User im Treiber mehr einstellen.
Was auch nicht zu vergessen ist : Wenn der User im Treiber das Anwendungs-AA ausser Kraft setzt und eigenen Einstellungen tätigt, dann ist das was du mit (w)gl_multisample_arb anforderst im Endeffekt umsonst. Von daher bin ich halt immernoch der Meinung das man die Wahl des AAs dem Nutzer überlassen sollte.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich persönlich wäre da als User bestimmt net gewillt irgendwas an meiner GRAKA zu schrauben. Schätze die meisten User machen das auch ungern. Da lieber nehmen sie schlechtere Qualität in kauf, als sich zu bemühen. Folge ist, dass viele Nutzer dann net die beste Qualität zu sehen bekommen. Und dass schlägt sich vielleicht auf ihre Meinung über das Spiel nieder.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Ja, so richtig ausgereift ist die ganze Multisampling-Geschichte noch nicht. Für mich wäre es eben in meiner 2D-Anwendung sehr geschickt, wenn ich gezielt die ganze Sache an- und ausschalten kann. Aber wenn ich mich dann darauf verlasse, dass das auch so stimmt (und z.B. keine überlappenden Texturen erstelle sondern sie direkt nebeneinander lege), komme ich doch wieder in Probleme, sobald der User das im Grafikkartentreiber festsetzt.
Vermutlich wird es aber doch darauf hinauslaufen, dass ich die WGL-Erweiterung benutze. Ob ich dann noch Überlappungen in den Texturen verwende oder nicht, überlege ich mir noch.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich habe es gerade mal ausprobiert.
Ich hab einfach 2 Dreiecke gezeichnet und bei dem einen vorher glDisable(GL_MULTISAMPLE_ARB) ausgeführt, beim anderen glEnable(GL_MULTISAMPLE_ARB). Das ergebnis ist eindeutig.
Man kann das mitten während der Runtime wechseln.
Verwendet: SDL und OpenGL
(Sorry, mir ist gerade eben erst die 2. Seite aufgefallen. Das wurde schon gesagt )
Registriert: Sa Feb 03, 2007 11:10 Beiträge: 26 Wohnort: Dingolfing
Ich hab gerade versucht, Multisampling zu aktivieren (glEnable(GL_MULTISAMPLE_ARB)), bekomme aber ein GL_INVALID_ENUM zurück. Woran kann das liegen? Unterstützt meine Grafikkarte das nicht? Muss ich irgendwelche Befehle davor ausführen? (Außer InitOpenGL usw.) Gibt es andere, leicht zu realisierende AA-Methoden?
Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.