Autor Beitrag
Nano-Ware
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 7



BeitragVerfasst: 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 :D
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 04.10.11 14:39 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
Multisampling und Supersampling
Aber doch nicht für einfache geometrische Formen! Dafür gibt es Wu's Algorithm.

_________________
>λ=
Nano-Ware Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 7



BeitragVerfasst: 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 :D
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 05.10.11 23:07 
user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
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 :D


user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
Okay würdet ihr mir also im Endeffekt empfehlen, das einfach zu lassen und einfach mit GDI+ zu arbeiten?

Wenn du etwas lernen willst: nein

Ansonsten könntest du einfach mal den Algorithmus von Wikipedia nehmen und den Schritt für Schritt auf dem Papier durchgehen. Das hilft oft ungemein beim Verstehen.