Farbverlauf mit Lichtquellen

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Vincent

Betreff: Farbverlauf mit Lichtquellen

BeitragDo, Jun 10, 2004 0:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo !

Ich habe eben einen kleinen schwarz/weis farbverlauf mit punktförmigen lichtquellen gemacht, und ihr komentiert.
ich weis nicht, ob das jemand brauchen kann ... vielleicht für highmaps oder weltraumbilder ... kA ...

Code: [AUSKLAPPEN]

;Schwarz/Weis Farbferlauf, mit punktförmigen Lichtquellen

Graphics 800,600,32,2
SeedRnd MilliSecs() ;Startwerte für Zufallszahlen setzen

While Not KeyDown(1)
   Color 255 , 0 , 0 ;tolle rote Farbe als Malfarbe setzen
   Rect 99 , 99 , 603 , 403 ;der tolle rote Rahmen
   
   Color 255 , 255 , 255 ;Malfarbe für Text (weis)
   Text 99 , 510 , "ESC zum Beenden"
   Text 99 , 525 , "beliebige Taste, um neues Bild zu erstellen)
   
   spot_zahl = Rand(3,10)  ;Anzahl der Lichtquellen
   Text 99 , 80 , spot_zahl + " Lichtquellen"
   
   zufall = Rand(0,1000)
   SeedRnd zufall ;setzen des Startwertes für die zufällige Erzeugung der Lichtquellen
   Text 600 , 80 , "SeedRnd " + zufall ;die Bilder sind reproduzierbar, wenn man den gleichen Startwert verwendet
   
   Dim spots(spot_zahl,spot_zahl) ;Feld erzeugen, in dem die Eigenschaften der Lichtquellen gespeichert sind
   
   ;Eigenschaften der Lichtquellen festlegen
   For a=1 To spot_zahl 
      spots(a,0) = Rand(100,700) ;Horizontale Position
      spots(a,1) = Rand(100,500) ;Vertikale Position
      spots(a,2) = Rand(20,100) ;Itensität / Größe
   Next
      
   LockBuffer ;benötigt für Writepixelfast
   
   For x = 100 To 700
      For y = 100 To 500
         
         farb = 0  ;Malfarbe auf Ausgagsfarbe (schwarz) setzen
            
         For a = 1 To spot_zahl ;Addition von allem Licht auf der aktuellen Position
            farb = farb + spots(a,2)* ( spots(a,2) / ( Abs( spots(a,0) - x )^2 + Abs( spots(a,1) - y )^2 )^0.5 )
         
            If spots(a,0) = x And spots(a,1) = y Then farb=255 
            ;das Zentrum der Lichtquelle wird von der obigen Formel falsch berechnet, darum
            ;"manuel" weis gesetzt ... wert/0 ist nicht definiert
         Next
         
         If farb > 255 Then farb = 255 ;wenn ein Pixel heller als weis sein sollte, so wird seine Farbe auf weis gesetzt
            WritePixelFast x , y , farb*$10000 + farb*$100 + farb  ;Malen des Pixels
      Next
   Next
   
   UnlockBuffer ;benötigt für Writepixelfast
   
   WaitKey ;warten bis eine Taste gedrückt wurde
   Cls  ;Löscht den Bildschirm .... ohne Flip
Wend

End ;beenden des Programms .. damit umgeht man den doofen "programm ended" Dialog, im Editor
Gott ist nicht mit uns ... weil er mit Idioten keine Gnade kennt !

rambo256

BeitragDo, Jun 10, 2004 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Goil!
Asus F53z

Das Leben ist eine reine Konkatenation...

dominik

BeitragDo, Jun 10, 2004 11:54
Antworten mit Zitat
Benutzer-Profile anzeigen
naja verwendungszwecke gibts da wohl eher wenig aber siehr auf jedefall cool aus.

Travis

BeitragDo, Jun 10, 2004 12:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, keineswegs gar nicht mal so unübel! Gefällt mir! Könnte man vielleicht noch mit einer anderen Farbe machen und dann als Hintergrund für 'ne Highscoreliste oder sowas nehmen.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Kabelbinder

Sieger des WM-Contest 2006

BeitragDo, Jun 10, 2004 13:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, respect! Ich find das richtig gut, und ich wüsste auch einige Verwendungszwecke dafür. Very Happy
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Xenon

BeitragDo, Jun 10, 2004 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit dem SeedRnd anzeigen zum nachbauen fand ich gut.

Hab auch gleich mal ein Beispiel dazu gemacht:

BlitzBasic: [AUSKLAPPEN]
Const lmin = 5
Const lmax = 10

Const width = 599
Const height = 449

Const minradius = 10
Const maxradius = 100

Const xpos = 100
Const ypos = 75


Graphics 800, 600, 32, 2
SetBuffer BackBuffer()


Dim licht#(lmax-1, 5)


Repeat
time = MilliSecs()
SeedRnd MilliSecs()
zufall = Rand(0, 1000)
SeedRnd zufall
lanz = Rand(lmin, lmax)

For i=0 To lanz-1
licht(i, 0) = Rand(0, width)
licht(i, 1) = Rand(0, height)
licht(i, 2) = Rand(minradius, maxradius)
licht(i, 3) = Rand(0, 255)
licht(i, 4) = Rand(0, 255)
licht(i, 5) = Rand(0, 255)
Next

LockBuffer BackBuffer()
For i=0 To width
For j=0 To height
r = 0
g = 0
b = 0
For k=0 To lanz-1
x = i-licht(k, 0)
y = j-licht(k, 1)
abstand = x*x+y*y
If abstand < licht(k, 2)*licht(k, 2) Then
abstand = Sqr(abstand)
wert = (licht(k, 3)*((licht(k, 2)-abstand)/licht(k, 2)))
If r < wert Then
r = wert
End If
wert = (licht(k, 4)*((licht(k, 2)-abstand)/licht(k, 2)))
If g < wert Then
g = wert
End If
wert = (licht(k, 5)*((licht(k, 2)-abstand)/licht(k, 2)))
If b < wert Then
b = wert
End If
End If
Next
If r>255 Then r=255
If g>255 Then g=255
If b>255 Then b=255
f = (r Shl 16) + (g Shl 8) + b
WritePixelFast i+xpos, j+ypos, f
Next
Next
UnlockBuffer BackBuffer()

Color 255, 0, 0
Rect xpos-1, ypos-1, width+3, height+3, 0

Color 255, 255, 255

Text 0, 0, "Renderzeit: "+(MilliSecs()-time)+" ms"
Text 0, 10, "SeedRnd: "+zufall
Text 0, 20, "Lichtanzahl: "+lanz

Flip 0

Cls

WaitKey
Until KeyDown(1)
End


Wer will kann mal lanz auf 3 setzen und das statt der zufallswertberechnung für die lichter nehmen:

BlitzBasic: [AUSKLAPPEN]
	licht(0, 0) = 300
licht(0, 1) = 200
licht(0, 2) = 100
licht(0, 3) = 255
licht(0, 4) = 0
licht(0, 5) = 0

licht(1, 0) = 275
licht(1, 1) = 256
licht(1, 2) = 100
licht(1, 3) = 0
licht(1, 4) = 255
licht(1, 5) = 0

licht(2, 0) = 325
licht(2, 1) = 256
licht(2, 2) = 100
licht(2, 3) = 0
licht(2, 4) = 0
licht(2, 5) = 255

Travis

BeitragDo, Jun 10, 2004 14:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Das erinnert mich irgendwie an Moleküle. Jetzt müsste man mal rangehen und diese Lichtquellen beweglich machen. Für eine Echtzeitdarstellung wäre es natürlich zu langsam, aber vielleicht könnte man ja ein Video oder ein Animationsbild draus machen. Wäre bestimmt'n cooler Effekt, wenn die Dinger dann aufeinandertreffen.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group