[GELÖST] Bunte Lichter - Mischen und anständig darstellen?
Übersicht

![]() |
M0rgensternBetreff: [GELÖST] Bunte Lichter - Mischen und anständig darstellen? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Leute.
Ich bin gerade dabei den ganzen Code für meine 2D-Lichter und Schatten schön zu schreiben. Dabei habe ich auch eine Erweiterung eingeführt: Bunte Lichter. Leider funktioniert das nicht so ganz, wie es soll. Zum einen werden meine blauen Lichter rot und zum anderen vermischen sich die Farben nicht wie gedacht. Ansätze zum Mischen der Farben habe ich dort gefunden: https://www.blitzforum.de/foru...1931#41931 Im Prinzip mache ich es genauso. Nur, dass ich nicht für jedes Licht die Pixel überprüfe, sondern für jeden Pixel alle Lichter. Mein Code sieht demnach folgendermaßen aus (der wichtige Ausschnitt der Funktion. Initialisierung der Pixmap lasse ich einfach hier weg): BlitzMax: [AUSKLAPPEN] 'Alle Pixel durchgehen Ich war der Meinung, dass das so funktionieren könnte. Aber dieser Screenshot beweist etwas anderes: Dort kann man die angesprochenen Probleme gut erkennen. Dort, wo die Lichter noch relativ stark sind, funktioniert das Mischen noch relativ gut (unten im Bild, wo grün und Blau aufeinander treffen). An anderen Stellen dafür umso schlechter (rechts im Bild, das grün und das rot). Diese schlechten Übergänge oben oder in der Mitte (dort wo das Licht so fetzenförmig ineinander greift) nehem ich bei dem Mischen mal aus, da hier auch die Farben falsch sind. Wie man an der Lichtquelle sieht, sollte das Licht eigentlich blau sein. Aber leider wird es aus irgendeinem Grund ab einer bestimmten Entfernung einfach Rot. Weiß vielleicht jemand, was ich falsch mache? Oder kann mir jemand sagen, wie ich es eher machen sollte? Weiß echt keinen Rat mehr. Habe auch schon versucht, die Farbwerte durch die Anzahl der genutzten Lichter zu teilen. Aber das Ergebnis ist nicht besser. Wäre wirklich super, wenn mir jemand weiterhelfen könnte. Lg, M0rgenstern |
||
- Zuletzt bearbeitet von M0rgenstern am Di, Apr 03, 2012 10:55, insgesamt einmal bearbeitet
![]() |
blackgecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Meine erste Vermutung:
Code: [AUSKLAPPEN] 'Farbwerte zwischenspeichern.
Local OldR:Int = targbColor.Red(), OldG:Int = targbColor.Green(), OldB:Int = targbColor.Blue() Du setzt bei jedem Render-Vorgang die aktuelle Pixelfarbe als Startfarbe. Wenn du jetzt ein paar mal hintereinander renderst, gibts möglicherweise seltsame Vermischungen, weil die eben gerade erst errechnete Farbe immer wieder hinzu addiert wird. Versuch also mal OldR/G/B mit 0 zu initialisieren. |
||
So long and thanks for all the fish.
Fedora 17 | Windows 7 || BlitzPlus | BlitzMax Rechtschreibflame GO!!! Deppenapostroph | SeidSeit | Deppenakzent | DassDas | Deppenleerzeichen | TodTot | enzigste.info - Ja, ich sammel die. |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey blackgecko:
Im Prinzip ist targbColor.Red() immer 0. Ich render das ganze nämlich nur einmal und schreibe es dann final auf die Pixmap. Und die Pixmap initialisiere ich komplett in schwarz. Und jeder Pixel wird ja nur einmal bearbeitet. Aber ich habe es jetzt einfach mal direkt mit 0 als Startfarbe für Oldr,OldG und OldB versucht: Das Ergebnis ist das gleiche. Lg, M0rgenstern |
||
![]() |
ZaPBetreff: Re: Bunte Lichter - Mischen und anständig darstellen? |
![]() Antworten mit Zitat ![]() |
---|---|---|
M0rgenstern hat Folgendes geschrieben: BlitzMax: [AUSKLAPPEN]
Liegt hier vielleicht der Fehler? Das sieht für mich aus, als wandelst Du dort HSV nach RGB um, und dann beim Pixmap schreiben nochmal, aber targbColor ist doch zu dem Zeitpunkt schon im RGB Format, oder? |
||
Starfare: Worklog, Website (download) |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey ZaP.
Das sieht nur so aus^^ Kurze Erklärung hierzu: BlitzMax: [AUSKLAPPEN] targbColor = TColorARGB.ColorHSVToColorARGB(tchsvNewColor) targbColor hat den Typ TColorARGB. Mit der Zeile dort wird vom HSV-System in das (A)RGB-System umgewandelt. Die Klasse habe ich mir geschrieben, um Farben und Farbinformationen besser zu nutzen. Dadurch muss ich einem Objekt nicht jeweils für rot, grün und blau eine eigene Variable geben (oder ein Array) sondern nur eine Variable dieses Typs. Dann kann ich mit targbColor.Red() auf den Rotanteil zugreifen. Das gleiche gilt dann für Alpha, Blau und Grün. BlitzMax: [AUSKLAPPEN] tpPixmap.WritePixel(iX, iY, targbColor.ConvertToARGB())
Diese Zeile schreibt ja an entsprechender Stelle die Farbinformationen in die Pixmap. Aber man kann der Pixmap ja nicht einfach einen Rot-Anteil, einen Grün-Anteil und einen Blau-Anteil geben, sondern muss diese ganzen Anteile zu einem 32-Bit Wert zusammenfassen. (Mit den Bitbefehlen, also shl) Und genau das macht targbColor.ConvertToARGB(). Es rechnet die einzelnen Farbinformationen, die es beinhaltet, mit shl zu einem 32-Bit Wert um und gibt diesen Wert zurück. Ich konvertiere also nicht ins RGB-Format sondern berechne aus den Farbinformationen den 32-Bit Wert. Lg, M0rgenstern Edit: Also, ich habe den Fehler jetzt prinzipiell gefunden. Undzwar liegt er dort: BlitzMax: [AUSKLAPPEN] 'Farbe umwandeln und Helligkeit setzen (nur zur Sicherheit) Durch das nochmalige umwandeln in HSV und das neue setzen des Helligkeitswertes wurde im Prinzip die Farbe komplett überschrieben. Das liegt ja an dem Algorithmus mit dem umgewandelt wird (http://de.wikipedia.org/wiki/H...RGB_in_HSV). Wie gesagt. Das ganze funktioniert jetzt wie es soll. Leider gibt es ein Problem: Wenn man eine Mindesthelligkeit einstellt, dann wird diese ja nicht beachtet, da ja dort, wo keine Lichter sind die Farbe auf (0,0,0) gesetzt wird. Weiß jemand, wie ich das anders machen könnte? Ich müsste ja im Prinzip die Farbe direkt mit der Helligkeit verrechnen. Leider weiß ich nicht wie. Lg, M0rgenstern Edit2: Das Problem ist gelöst. Ich habe einfach OldR/OldG/OldB mit folgenden Werten initalisiert: BlitzMax: [AUSKLAPPEN] Local fRatio:Float = fAmbienceBrightness Dadurch wird die Pixmap von Anfang an entsprechend aufgehellt, falls fAmbienceBrightness > 0.0 ist. Das ganze sieht jetzt so aus: Auf dem Bild gibt es jetzt noch seltsame Farben. Das grau zum Beispiel. Aber das liegt daran, dass die Farbwen der Lichter zufällig bestimmt werden. Wenn man die Lichter in einem Editor setzt, dann ist das ja nochmal was anderes. Lg, M0rgenstern |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group