Kantenglättung (AA) in PB
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...
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...
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.Weis jemand ne andere Lösung?
Geht dann aber nur auf deinem Rechner wie gewünscht.
Greetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
And we're out of beta. We're releasing on time.
-
orange-blue
- Beiträge: 556
- Registriert: 04.09.2004 22:23
- Kontaktdaten:
Sowas ähnliches hab ich schon probiertZaphod 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.
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!
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!
-
Hellhound66
- Beiträge: 476
- Registriert: 23.03.2005 23:19
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
Hellhound66
- Beiträge: 476
- Registriert: 23.03.2005 23:19
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.Kaeru Gaman hat geschrieben: ein problem dabei:
die pixel am rand der grafik haben weniger nachbarn, das kann zu krassen verfälschungen führen.