Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 18:31

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 31 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Anti-Aliasing
BeitragVerfasst: Mi Jul 29, 2009 13:48 
Offline
DGL Member

Registriert: Mo Jul 20, 2009 14:52
Beiträge: 37
Wie kann man das Bild glätten?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 29, 2009 13:58 
Offline
DGL Member

Registriert: Sa Aug 09, 2008 09:07
Beiträge: 112
http://wiki.delphigl.com/index.php/Antialiasing


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 29, 2009 14:02 
Offline
DGL Member

Registriert: Mo Jul 20, 2009 14:52
Beiträge: 37
Da kommt man dann irgendwann zu
http://wiki.delphigl.com/index.php/OpenGL_Smooth

und ganz unten steht
Wiki hat geschrieben:
glHint um den OpenGL-Treiber zu bitten eine schnellere oder eine schönere Berechnungsmethode zu verwenden.
. Welche Parameter muss ich dabei übergeben?

Edit: habs gefunden, aber es ändert sich nichts. Die Linien sind dicker, aber nicht geglättet.

Also der Code sieht so aus:
Code:
  1. glenable(GL_LINE_SMOOTH);
  2. glenable(GL_POLYGON_SMOOTH);
  3. glhint(GL_LINE_SMOOTH_HINT,gl_nicest);
  4. glhint(GL_POLYGON_SMOOTH_HINT,gl_nicest);

(Texturen hab ich keine.)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 29, 2009 14:22 
Offline
DGL Member

Registriert: Sa Mär 14, 2009 17:48
Beiträge: 99
Programmiersprache: D, Java, C++
http://wiki.delphigl.com/index.php/Open ... h#Polygone

Hast du Blending aktiviert? :).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 29, 2009 14:30 
Offline
DGL Member

Registriert: Mo Jul 20, 2009 14:52
Beiträge: 37
Wenn glenable(GL_BLEND); zum Aktivieren reicht, dann ja.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 29, 2009 15:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Es ist häufig hilfreich einen Artikel vollständig zu lesen:
http://wiki.delphigl.com/index.php/Open ... h#Probleme
Zitat:
Bei Polygonen tauchen die größten Problem auf, und zwar so große, dass es von vielen Grafikkarten gar nicht unterstützt wird. Vor allem bei aktiviertem GL_POLYGON_SMOOTH kommt es also des öfteren vor, dass in den Softwaremodus umgeschalten wird, und nicht einmal dann kann man sicher sein dass es funktioniert. Und wenn es doch funktioniert so erwartet einem häufig bereits die nächste Überraschung. (...)


Ich habe bisher noch kein Antialiasing implementiert, aber ich glaube man geht dabei so vor das man einfach das Bild ganz normal aber in doppelter (vierfacher, ...) Auflösung rendert und anschließend das Bild auf die gewünschte Größe runterskaliert. Das entspricht dann 2xAA, 4xAA, usw...sicher bin ich mir bei der Sache aber nicht.
Das runterskalieren realisiert man am besten in dem man in eine Framebufferobject rendert und die erhaltene Textur mit einem bildschirmfüllenden Quad dann nochmal normal auf den Bildschirm.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 29, 2009 15:11 
Offline
DGL Member

Registriert: Mo Jul 20, 2009 14:52
Beiträge: 37
In dem Konfigurationsprogramm von der Grafikkarte kann man wählen, ob Antialiasing generell aktiviert oder deaktiviert ist oder ob die Programmeinstellung übernommen werden soll.
Wenn ich es einschalte, bekomme ich auch ein perfektes Ergebnis.

Das mit den auftauchenden Problemem habe ich auch gelesen, aber wenn man es über die Grafikkarte einschaltet, dann tauchen die nie auf, auch nicht bei anderen Computerspielen.
Aber es müsste ja wenigstens "manchmal" geglättet sein.

Da die Grafikkarte aber die "Anwendungseinstellungen" übernehmen kann, müsste die Anwendung doch das Antialiasing auch einstellen können.

Wenn man es größer macht und dann verkleiner nimmt man der Grafikkarte ja die Arbeit ab, weil die das eigentlich machen sollte und bestimmt auch besser hinbekommt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 29, 2009 15:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Das mit den auftauchenden Problemem habe ich auch gelesen, aber wenn man es über die Grafikkarte einschaltet, dann tauchen die nie auf, auch nicht bei anderen Computerspielen.

OpenGL Smooth entspricht nicht dem was man im Treiber aktivieren kann. Soweit ich weiß ist OpenGL Smooth ist ein uralter Ansatz der halt noch von damals übrig geblieben ist als es noch nichts anderes gab. Deswegen wird das auch von kaum einer Grafikkarte unterstützt.

Zitat:
Wenn man es größer macht und dann verkleiner nimmt man der Grafikkarte ja die Arbeit ab, weil die das eigentlich machen sollte und bestimmt auch besser hinbekommt.

Wenn du eine FBO benutzt wird die Textur die Grafikkarte nie verlassen. Das verkleinern übernimmt die Grafikkarte. Wahrscheinlich macht die Grafikkarte intern nichts anderes.

Zitat:
Da die Grafikkarte aber die "Anwendungseinstellungen" übernehmen kann, müsste die Anwendung doch das Antialiasing auch einstellen können.

Da hast du allerdings recht. Aber wie das geht weiß ich auch nicht.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 29, 2009 15:33 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Es gibt auch verschiedene Extensions die für Antialiasing sorgen sollen. Ich hab' das auch noch nie ausprobiert aber du könntest mal nach "GL_ARB_multisample" oder "GL_EXT_framebuffer_multisample" suchen. K.A. ob das wirklich funktioniert, klingt aber schon mal nicht schlecht.
Sicher ist das "GL_NV_framebuffer_multisample_coverage" funktioniert (steht auf der NVidia-Seite), aber ist eben nur für NVidia-Grafikkarten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 29, 2009 15:35 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
http://wiki.delphigl.com/index.php/GL_ARB_multisample
Das habe ich mal ins Wiki geschrieben, als ich vor dem gleichen Problem stand. Interessant ist der Absatz "Anwendung" ganz unten, der zeigt, dass das Ganze zwar geht, aber ziemlich umständlich ist. Ich stell derzeit einfach meine Grafikkarte ein.

Achtung, das Antialiasing lässt die Framerate ganz schön sinken.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 30, 2009 09:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Du solltest dir eventuell auch mal folgenden Beitrag von Lord Horazont anschauen. Der Baut auf der Erweiterung auf die Traude dort genannt hat. Aber bitte nicht einfach nur kopieren sondern auch versuchen zu verstehen.

http://www.delphigl.com/forum/viewtopic.php?p=45167#45167


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 30, 2009 09:51 
Offline
DGL Member

Registriert: Mo Jul 20, 2009 14:52
Beiträge: 37
Lossy eX hat geschrieben:
auch versuchen zu verstehen.

Warum heißt dieses Unterforum wohl so...?
Ich versteh kein Wort davon.

Naja wo soll ich die Funktion denn aufrufen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 30, 2009 11:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Zitat:
Warum heißt dieses Unterforum wohl so...?

Jepp. Deswegen sag ich das ja. Das ist nicht sonderlich viel und eigentlich auch nicht übermäßig kompliziert. Auf der anderen Seite ist es auch nicht übermäßig sinnvoll, wenn du Dinge benutzt von denen du nicht genau weißt was sie machen.

Aber zu dem Code.
Der Code erstellt einen RenderingContext und erfragt mit Hilfe der Erweiterung WGL_ARB_pixel_format und GL_ARB_multisample ob ein RenderContext mit AntiAliasing verfügbar ist. Die Methode gibt dabei das PixelFormat des entsprechenden Formates zurück. PixelFormate sind Zahlen mit denen ein Format im Treiber verknüpft ist. Also 16 Bit Farbtiefe mit 16 oder 32 Bit Tiefenbuffer. 32 Bit Farbtiefe etc etc etc. Und da gibts eben auch die Formate mit AntiAliasing.

Diese ID die du da zurück bekommst musst du mit Hilfe von SetPixelFormat an dein Formular zuweisen. So etwas geht nur ein einziges Mal. Deswegen erstellt die Methode auch ein temporäres Formular. Wenn du das PixelFormat zugeweisen hast musst du mit wglCreateContext einen Kontext erstellen. Wie das genau abläuft solltest du in den Tutorials 1 bereits gelernt haben ;) bzw. die Methode CreateRenderingContext aus der dglOpenGL ist auch gut zum Nachschlagen.

Mit ActivateRenderingContext aus der dglOpenGL solltest du den erstellten Context dann noch aktivieren. Dann werden auch die anderen Funktionspointer innerhalb des Headers geladen.

PS: Die eigentliche Erstellung deines jetzigen Context musst du dann weglassen. Aber damit hättest du auch schon die Stelle wo es hin muss.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 30, 2009 13:46 
Offline
DGL Member

Registriert: Mo Jul 20, 2009 14:52
Beiträge: 37
Also so ist es auf jeden fall falsch:
Code:
  1.   DC:=GetDC(panel.Handle);
  2.   SetPixelFormat(RC,GetMultisamplePixelFormat,0);
  3.   ActivateRenderingContext(DC, RC);
  4.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 30, 2009 17:09 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Ich bin mir nicht sicher ob ich das jetzt richtig verstanden habe, aber bisher wurden Empfehlungen gegeben AA durch das Runterskalieren eines überdimensional großen Bildes zu erhalten. Ich kenne allerdings noch einen Ansatz (ich glaube aus Stalker 2 ?) Bei dem AA als postprocessing eingebaut wurde. Das funktioniert dort so, dass man anhand von 3x3 texturlook-ups in den normalen- und tiefenwerten eine Kantenerkennung durchführt und darauß eine Graustufen-Maske errechnet, welche dann mit einem Gaussblur zusammen verwendet wird, wodurch der Blur nur die Kanten von Objekten weichzeichnet. Dieser Ansatz erfordert allerdings Render-To-Texture und Shader (sollte zumindest der sinnvollste Weg sein dafür).
Ich suche gerne mal das Whitepaper in dem ich das gelesen habe, denn für mich war das eine sehr verlockende Idee, da man zwar die Texturelookups hat, sich allerdings die übergroß gerenderte Grafik sparen kann.

Edit: Verdammt .. Einsteiger-Forum, sry für die ShaderKeule. Vielleicht interessierts aber trotzdem jemanden

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 31 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]