Seite 2 von 3
Verfasst: 14.12.2004 14:32
von Dostej
Wenn Du wirklich nur die Kanten glätten möchtest (in einem Bild), dann musst Du zuerst mal die Kanten erkennen. das funktioniert praktisch wie ein Relieffilter, der krasse Wechel in der FArbe/Helligkeit erkennt. An dieser Stelle wird dann ein Filter angewendet, der die Umgebungsfarben anpasst.
0 0 0
0 X 0
0 0 0
oder 4x4 oder noch grösser, je nachdem, wie stark du die Kanten geglättet haben möchtest. Du kannst auch den einzelen Pixeln Wichtungen verpassen, das verändert uach den Effekt.
Gute Artikel über Bildfilter findest Du hier und entsprechend daneben:
http://www.codeproject.com/cs/media/dis ... ect=845609
Der Autor ist Christian Graus, der hat noch andere gute Artikel über Imagefiltering geschrieben. Echt lohnenswert...
Verfasst: 14.12.2004 15:52
von Laurin
Weis jemand ne andere Lösung?
Jup. Wenn du eine GeForce-Grafikkarte hast, kannst du unter Desktop->Rechte Maustaste->Eigenschaften->Einstellungen->Erweitert->Tab mit deiner Grafikkarte->Leistungs- & Qualitätseinstellungen->Anti-Aliasing-Einstellung einstellen was du magst. AA wird dann vom Treiber eingeschaltet und läßt sich durch das Programm glaubig nicht ändern.
Geht dann aber nur auf deinem Rechner wie gewünscht.
Greetz Laurin
Verfasst: 15.12.2004 01:33
von Zaphod
eine sehr billige lösung währe, das sprite aufzuteilen in den kern und einen 1-2 pixel breiten rand, als 2 getrennte sprites, und das randsprite dann mit ein wenig transparenz zu zeichnen. danach das innere spriteohne transparenz drüber und schon hast du einen sehr ähnlichen effekt.
Verfasst: 15.12.2004 16:46
von orange-blue
Zaphod hat geschrieben:eine sehr billige lösung währe, das sprite aufzuteilen in den kern und einen 1-2 pixel breiten rand, als 2 getrennte sprites, und das randsprite dann mit ein wenig transparenz zu zeichnen. danach das innere spriteohne transparenz drüber und schon hast du einen sehr ähnlichen effekt.
Sowas ähnliches hab ich schon probiert

. schaut leider nicht so toll aus

Verfasst: 15.04.2005 20:28
von Spirit
Ein Sprite könnte man auch folgendermaßen glätten:
Man benutzt DrawingBuffer() und geht Pixel für Pixel so vor: Zuerst ermittelt man die Farbe des aktuellen Pixels, danach die Farben der benachbarten Pixel. Aus diesen ermittelten Farben bildet man nun den Mittelwert. Die erhaltene Farbe wird in einem anderen Buffer mit den gleichen Dimensionen wie der Original-Buffer des Sprites gespeichert, und zwar an den gleichen Koordinaten. Um einzustellen, wie stark das Bild weichgezeichnet werden soll, kann man z.B festlegen, wie sehr sich die Farben der Nachbarpixel auf die Gesamtfarbe auswirken (z.B. die Farbe des Aktuellen Pixels 70% und die Farben der Nachbarpixel 30%). Zum Schluss überschreibt man den Buffer des Original-Sprites mit dem anderen Buffer, in dem die Mittelwerte gespeichert wurden.
Fertig!

Verfasst: 16.04.2005 10:39
von Hellhound66
Das zwingt einen aber, es in Assembler zu schreiben, sonst geht hier jeder Rechner in die Knie.
Verfasst: 16.04.2005 12:36
von Kaeru Gaman
@BlueSpirit
so funktioniert das im grunde auch.
in der Help zu POVRay [
www.povray.org ] ist der Algorythmus für AntiAliasing sehr präzise beschrieben.
in unserem fall geht es dann halt um die farbwerte des ursprungssprites,
nicht um die per ray ermittelten szenenfarbwerte.
ein problem dabei:
die pixel am rand der grafik haben weniger nachbarn, das kann zu krassen verfälschungen führen.
@Hellhound
das performance-problem ist eigentlich vernachlässigbar:
du mußt den vorgang nur ein einziges mal durchführen.
- am anfang des spielstarts fällt es nicht soo ins gewicht.
- vorab erledigen, und die veränderten grafiken ins paket packen.
Verfasst: 16.04.2005 13:01
von Hellhound66
Ach so, ich dachte dass das Echtzeit AA werden sollte...
Verfasst: 16.04.2005 13:08
von Kaeru Gaman
Hellhound66 hat geschrieben:Ach so, ich dachte dass das Echtzeit AA werden sollte...
hm... in dem fall hättest du natürlich völlig recht...
Verfasst: 16.04.2005 20:26
von Spirit
Kaeru Gaman hat geschrieben:
ein problem dabei:
die pixel am rand der grafik haben weniger nachbarn, das kann zu krassen verfälschungen führen.
Das stimmt schon. Aber man könnte das Problem beheben, indem man z.B. den Algorythmus so programmiert, dass er die Pixel am Rand auslässt, sodass sichergestellt ist, dass jedes Pixel einen Nachbarn hat. Die Rand-Pixel behalten dann ihre ursprüngliche Farbe. Das ist aber zu verkraften, da die Pixel am Rand sowieso meistens transparent sind.