Hallo Forum, hab mir gerade für meine Matrix nen kleinen Plasmaeffekt ähnlich wie in Glediator erstellt.
Möchte natürlich nicht immer den PC dafür anhaben.
Infos dazu gibts hier:
http://lodev.org/cgtutor/plasma.html
Natürlich sind Fließkommazahlen und sinus Funktionen ganz schön harter Stoff für so nen kleines 8 Bit Rechenwerk.
Habe mir auch mal den Sourcecode von Glediator angeschaut, aber zwei Sinusfunktionen pro Pixel und noch eine pro Line lassen die Performance auch schnell sinken...
Komme mit dem Source von Pepe auf ca. 6 Bilder die Sekunde bei 24 MHz und ohne Prozessorlast um die Daten in die Matrix zu schauffeln, was bei ATMegas noch dazu kommt.
Also gibts jetzt stat Fließkommazahlen, ganze Zahlen und für die Sinusfunktion gibts ne LUT im Flash. Der Farbraum liegt auch im Flash wie die Gammakorrektur...
Letztendlich Schupst man ein paar Bits und schaut nur noch in den Tabellen nach den richtigen Werten...
Wie schnell das jetzt auf dem 24 MHz 8 Bitter läuft habe ich nicht gemessen. Aber irgendwas über 100 Bilder die Sekunde, denn ich seh die LED nicht mehr toggeln
Hier nun die Funktion:
void float_the_plasma(uint16_t plasmacounter,uint8_t _x,uint8_t _y,type_rgb *buffer)
{
for(uint8_t x=0;x<_x;x++) {
for(uint8_t y=0;y<_y;y++) {
uint8_t temp1 = (x<<4) + plasmacounter;
uint8_t temp2 = (y<<5) + plasmacounter;
uint8_t temp3 = ((x<<4) + (y<<4)) + (plasmacounter>>1);
uint8_t temp4 = ((x*x)<<3 + (y*y)<<3) / (x+y+1);
uint16_t color =
(((
+ sin_lut(temp1)
+ sin_lut(temp2)
+ sin_lut(temp3)
+ sin_lut(temp4)
) >> 4) + plasmacounter) % 256*3;
buffer[mapper(x,y)].r = gamma(add_color(color*3));
buffer[mapper(x,y)].g = gamma(add_color(color*3+1));
buffer[mapper(x,y)].b = gamma(add_color(color*3+2));
}
}
}
Alles anzeigen
Kann natürlich nach belieben angepasst werden, einfach die Funktionen in Temp1 bis 4 verändern...
Die Sinus_LUT und den Farbraum hänge ich mal als Datei an... die gamma LUT sollte klar sein und die mapper lookup table ist für die Anordnung meiner Matrixpixel zuständig. Das hängt ja dann auch von euch ab...
Ich poste das hier, weil ich noch keinen "schnellen" Source für 8 Bit Mirkrokontroller im Netz gefunden habe, aber vielleicht gibts auch schon was?!
Viel Spaß damit
Grüße
Basti