Du bist nicht angemeldet.

Werbeanzeige

Dalon

Frischling

  • »Dalon« ist der Autor dieses Themas

Beiträge: 81

Wohnort: Berlin

Beruf: Freiberufler

  • Private Nachricht senden

1

22.04.2008, 20:39

Licht: Farbübergang von Farbe 1 zu Farbe 2

Ok, ich hoffe dass hier nicht nur Fragen zu den APIs reinkommen, sondern auch generell zur grafischen Programmierung, sonst tut's mir leid für meine falsche Forenwahl :/

Also mein Problem:

Angenommen ich habe 2 Farbwerte:

RGB (float): 0.0f, 0.0f, 0.5f
RGB (float): 0.8f, 0.8f, 0.8f

Und ich habe einen Wert, welcher einen Zeitraum in Millisekunden darstellt:

int iTime = 60000;

Nun möchte ich, dass ein Farbwert "fadet", also von Farbe 1 zu Farbe 2, und zwar in 60000 Millisekunden (ca 60 sekunden - 1 Minute). Damit meine ich eben keinen Farbverlauf von links nach rechts via brush oder ähnlichem, sondern die Farbe eines Lichts soll dabei verändert werden ;)

Mein Ansatz war etwas mit: Einen Wert für R, G und B, der pro frame um X/Y/Z verringert wird, wobei man X/Y/Z erhält, wenn man R/G/B durch einen bestimmten Wert teilt. Aber irgendwie glaube ich, dass ich etwas übersehen habe / falsch mache O.o

(Ja ich habe gegoogled, aber nichts BRAUCHBARES gefunden >.<).

Hat jemand da eine Referenz oder selbst eine Idee? :/

2

22.04.2008, 21:01

Schau mal in der DirectX-Hilfe nach D3DXColorLerp oder D3DXColorModulate, das hilft dir wahrscheinlich weiter.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

22.04.2008, 21:36

Du kannst linear zwischen den Farbwerten interpolieren. Hier mal ein Codeschnippsel aus meinem Framework:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
inline void Color::Lerp( const Color& start, const Color& end, float t )
{
    if ( t < 0.0f )
        *this = start;
    else if ( t > 1.0f )
        *this = end;
    else
    {
        a = start.a + t * ( end.a - start.a );
        r = start.r + t * ( end.r - start.r );
        g = start.g + t * ( end.g - start.g );
        b = start.b + t * ( end.b - start.b );
    }
}


Notiz: "t" ist ein Wert zwischen 0 und 1. Also deine aktuelle Zeit in ms / 60000.
@D13_Dreinig

Dalon

Frischling

  • »Dalon« ist der Autor dieses Themas

Beiträge: 81

Wohnort: Berlin

Beruf: Freiberufler

  • Private Nachricht senden

4

22.04.2008, 21:49

PERFEKT danke david *sich an Kopf hau* Darauf hätte ich früher kommen sollen. Also VIELEN Dank für die schnelle und gute Hilfe :)

Werbeanzeige