Sonnenuntergang

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Iguan

Betreff: Sonnenuntergang

BeitragMo, Apr 30, 2012 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen

Ich würde gerne für ein Spiel (2d) im Hintergrund eine Sonnenuntergangs-Animation haben. Ich habe mal versucht, ein Bild mit einem entsprechenden Farbverlauf langsam nach unten zu bewegen... sieht aber irgendwie Sch**sse aus Rolling Eyes . Bei einem echten Sonnenuntergang änden ja die Farben stetig... wie macht man das am besten?? Vielleicht gibt es ja eine Berechnungsformel für die Farben, hat ja mit physik und Lichtbrechung etc.. zu tun?

mfg

Iguan

Xeres

Moderator

BeitragMo, Apr 30, 2012 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube nicht, dass du so weit wie physikalisch exakte Lichtbrechung zu gehen brauchst Wink
Farbverläufe berechnen sollte kein Problem sein, dafür eher, wie du die dann einsetzt. 3D Untersützung würde alles einfacher machen, um Bilder ein zu Färben oder mit einem bunten, halb durchsichtigem Layer zu versehen.
Hast du ein Bild/Demo vom derzeitigem Zustand?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Iguan

BeitragMo, Apr 30, 2012 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe im internet eine Dokumentation gefunden betreffend der Berechnung der Himmelsfarben... Meine Mathekenntnisse reichen aber nicht aus. Ich bräuchte eine Formel, womit die R G B - Werte berechnet werden könnten. Hier der Link: http://www.sternwarte-reckling...farben.pdf

Ich habe vor mit Draw3D2 zu arbeiten, also doch 3D-beschleunigt, allerdings verstehe ich nicht ganz wofür das gut sein soll, da ich ja nur den Hintergrundsfarbverlauf zeichnen möchte...

Den code, welcher ich jetzt habe, ist es nicht wert zu posten:
Code: [AUSKLAPPEN]

; pseudo-code
y = y + 1
DrawImage Sonnenuntergangsverlauf,0,-200+y

Xeres

Moderator

BeitragMo, Apr 30, 2012 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Benutze ein paar Farben als Stützpunkte und interpoliere die Zwischenschritte:
Code: [AUSKLAPPEN]
Local fr# = 1.0 - f
Local R% = r1 * fr + r2 * f
Local G% = g1 * fr + g2 * f
Local B% = b1* fr + b2 * f

Wobei der Faktor f ein Wert zwischen 0 und 1 ist. Mit den Farben Blau-Orange-Rot-Schwarz hättest du dann z.B. einen passablen verlauf.

Wenn du das Lichtbrechungszeug *richtig* berechnen willst... viel Spaß, aber ich glaube, dass wäre dann ein Raytracer und für einen grafischen Effekt etwas groß.

Ich dachte eigentlich an ein Screenshot oder was du für Bilder benutzt.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Iguan

BeitragMo, Apr 30, 2012 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm.. aber welche Farben soll ich als Farbstützpunkte nehmen? und wie soll ich den Verlauf langsam ändern, damit es langsam Nacht wird? Da müsste ich ja neue Stützpunkte berechnen - aber wie? Ich benutze zurzeit dieses Bild: http://www.dave-co.com/gutterz...amp;t=2372

Xeres

Moderator

BeitragMo, Apr 30, 2012 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde aus dem Verlauf die wichtigsten Farben rauspicken. Wenn du nicht nur den Farbverlauf in der Zeit sondern auch von oben nach unten meinst... Auch die ließen sich dann interpolieren. Oben blau, unten Rot, und von gesättigt nach schwarz.
Minimum 4 Farben, der Rest wird interpoliert.

Edit:
BlitzBasic: [AUSKLAPPEN]
Graphics(512,512,0,2)

Type TColor
Field r,g,b
End Type

Function C_Color.TColor(r,g,b)
Local c.TColor=New TColor
c\r=r
c\g=g
c\b=b
Return c
End Function

Function Mix(c1.TColor,c2.TColor,f#,Mixed.TColor)
Local fr#= 1.0 - f
Mixed\r = c1\r * fr + c2\r * f
Mixed\g = c1\g * fr + c2\g * f
Mixed\b = c1\b * fr + c2\b * f
End Function

Local c1.TColor=C_Color(0,255,0) ;Oben-links
Local c2.TColor=C_Color(0,0,255) ;Oben-rechts
Local c3.TColor=C_Color(255,255,0);Unten-links
Local c4.TColor=C_Color(255,0,255);Unten-rechts

Local mix1.TColor=C_Color(0,0,0)
Local mix2.TColor=C_Color(0,0,0)
Local mix3.TColor=C_Color(0,0,0)


Local i, y,f#
For i=0 To 512

For y=0 To 512

;Ecken Horizontal mischen:
f#=Float(i)/512.0
Mix(c1,c2,f,mix1)
Mix(c3,c4,f,mix2)

;Beides vertikal:
f#=Float(y)/512.0
Mix(mix1,mix2,f,mix3)

Color(mix3\r,mix3\g,mix3\b)

Rect(i,y,1,1)

Next

Next

WaitKey()
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group