| Autor |
Nachricht |
Nano-Ware
       
Beiträge: 356
Erhaltene Danke: 7
|
Verfasst: Di 04.10.11 13:36
Hallo,
wenn ich mit dem Befehl LineTo() eine Linie zeichne bekomme ich wegen den Stufen richtig Augenkrebs. Ich hab mich vorher auch in GDI+ eingelesen, was Antialiasing problemlos beherrscht. Ich möchte einfach lieber verstehen, wie Antialiasing arbeitet und es eventuell selbst umsetzen. Es währe furchtbar lieb, wenn ihr mir das besser als Wikipedia erklären könntet und eventuell ein Beispiel for 4x und 16x Antialiasing für einen LineTo() - Befehl posten könntet, damit ich ein Anschauungbeispiel hab.
Es geht hier wirklich nur ums lernen. Im Endeffekt werde ich dann wohl sowieso GDI+ verwenden 
|
| |
|
|
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
|
|
Bergmann89
      
Beiträge: 1572
Erhaltene Danke: 50
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 04.10.11 14:05
Hey,
was AntiAliasing macht sollte im Grunde klar sein, es glättet pixlige Kanten indem es die umliegenden Pixel mit dem aktuellen verrechnet. Dabei gibt es zwei verschiedene Arten von AntiAliasing (es gibt noch mehr aber das sind die Grundlegenden): Multisampling und Supersampling. Beim Multisampling werden die Kanten mit Hilfe von Bitmasken gleich beim zeichnen geglättet. Das wird aber bei der Canvas relativ schwer umzusetzen sein. Beim Supersampling wird das Bild erst in einer höheren Auflösung gezeichnet und dann im Nachhinein wieder verkleinert. Das lässt sich mit einer Canvas schon eher realisieren. Umso größer das gezeichnete Bild umso besser das AA. Bsp: du willst ne 100x100 Image haben und es mit 4xAA glätten, dann musst du ein Bild von 400x400 Pixeln zeichnen. Deine Objekte müssen dann natürlich auch 4x größer gezeichnet werden, das die Proportionen stimmen. Dann suchst du dir irgendwo nen Algorithmus der das Bild runter rechnet. Dann solltest du das gewünschte Ergebnis haben.
Wenn du vor hast das ganze in einem Spiel zu benutzen, oder in einer ähnlichen Anwendung wo das Bild relativ oft neu gezeichnet wird, dann würd ich dir aber davon abraten das mit Canvas zu machen, weil sonst die CPU nicht mehr hinterher kommt. Da du es aber eh nur aus Übungszwecken machen möchtest stellt das denke ich kein Problem dar.
MfG Bergmann.
_________________ Ich weiß nicht viel lern aber dafür umso schneller^^
|
| |
|
|
Kha
       

Beiträge: 3722
Erhaltene Danke: 133
Arch Linux, Win 7
F#, C# (VS2010)
|
Verfasst: Di 04.10.11 14:39
Bergmann89 hat folgendes geschrieben : | | Multisampling und Supersampling |
Aber doch nicht für einfache geometrische Formen! Dafür gibt es Wu's Algorithm.
_________________ >λ=
|
| |
|
|
Nano-Ware 
       
Beiträge: 356
Erhaltene Danke: 7
|
Verfasst: Mi 05.10.11 21:04
Also ich versteh leider nur Bahnhof, entweder hab ich zu wenig Erfahrung oder ich bin einfach blöd. Könnt ihr das einfach idiotensicher erklären und einfach ein kleines Codebeispiel geben, in dem man einfach einen LineTo() Befehl im Nachhinein antialiasiert 
|
| |
|
|
Boldar
       
Beiträge: 1420
Erhaltene Danke: 46
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Mi 05.10.11 21:15
So einfach geht das nicht. Im Nachhinein klappt das Prinzipiell nicht. Schau dir doch mal Bresenham an (zum Verständnis). Das ist das, womit z.B. Lineto arbeitet. Der Wu-Algorithmus ist nun quasi das gleiche, nur dass halt immer ein "Verlauf" gezeichnet wird.
|
| |
|
|
Nano-Ware 
       
Beiträge: 356
Erhaltene Danke: 7
|
Verfasst: Mi 05.10.11 22:57
Okay würdet ihr mir also im Endeffekt empfehlen, das einfach zu lassen und einfach mit GDI+ zu arbeiten?
|
| |
|
|
F34r0fTh3D4rk
      
Beiträge: 5268
Erhaltene Danke: 22
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 05.10.11 23:07
|
| |
|
|