Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

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