Verschoben: Antwort auf: Materialfarben ändern

Vektoria Forum Verschoben: Antwort auf: Materialfarben ändern

Dieses Thema enthält 0 Antworten und 1 Teilnehmer. Es wurde zuletzt aktualisiert von  Tobias Breiner 3. Dezember 2019 - 19:20.

Ansicht von 1 Beitrag (von insgesamt 1)
  • Autor
    Beiträge
  • #2888 Antwort

    Tobias Breiner
    Keymaster

    Hi,

    in der Klasse CMaterial gibt es verschiedene Methoden, mit denen man die Texturfarben ändern kann, z.B. Scale, Translate, Rotate, TranslateDelta, …

    Diejenige, die du brauchst, dürfte folgende sein:

    Translate(CColor( „hier die RGB-Werte, jeweils zwischen 0 und 1 hereinschreiben“ ));
    Damit lässt sich ein Farbwert auf das aktuelle Material addieren, bzw. subtrahieren.

    Nehmen wir als Beispiel ein Material m_zm, welches einer grünliche diffuse Blatttextur enthält.

    Wenn wir dieses grünliche Blatt im Oktober herbstlich-gelb verfärben wollen, so addieren wir dazu Rot:

    m_zm.Translate(CColor(1.0f,0.0f,0.0f));

    … und schon ist unser Blatt gelb.

    Wir könnten natürlich auch unser Blatt für die Novembertage bräunlich verfärben, dann müssten wir auch etwas Grün subtrahieren, und das addierte Rot etwas niedriger halten, also, circa:

    m_zm.Translate(CColor(0.5f,-0.5f,-0.0f));

    Alternativ könnten wir auch direkt den Farbwert verändern, mit der Methode RotateHue, dies würde in diesem Falle auch eine realistische Verfärbung ergeben. Um ein Blatt von Grün nach Rot zu verfärben, müssen wir die Farbe im Farbkreis der additiven Farbmischung 60° mathematisch negativ rotieren, also:

    m_zm.RotateHue(-TWOPI/6.0f); // Macht Grün zu Gelb

    Wir können das grüne Blatt auch zu einem roten Blatt mutieren lassen, indem wir 120° drehen:

    m_zm.RotateHue(-TWOPI/3.0f); // Macht Grün zu Rot

    … oder zu einem orangenem Blatt durch eine Drehung um -90°

    m_zm.RotateHue(-HALFPI); // Macht Grün zu Orange

    Falls wir das Blatt braun verfärben wollen, müssten wir dann mit Scale noch Helligkeit herausnehmen. Damit die vorherige Farbrotation nicht gelöscht wird, verwenden wir ScaleDelta:

    m_zm.RotateHue(-HALFPI); // Macht Grün zu Orange
    m_zm.ScaleDelta(0.5f); // und danach Orange zu Braun

    Um eine langsame Verfärbung zu erreichen, brauchen wir einen Parameter fr, dessen Wert über fTime in der Tick-Routine langsam von 0.0f bis 1.0f wandert. Wollen wir z.B. ein Blatt langsam von Grün über Gelb, Orange nach Rot verfärben, so geht das so:

    void Tick(float fTime, float fTimeDelta)
    {
      ...
    ´ float fr = 1.0f;
      if(fTime<1000.0f)
         fr = fTime/1000.0f; // In den ersten 1000 Sekunden läuft der Wert von fr von 0 nach 1
      m_zm.RotateHue(-fr * TWOPI/3.0f); // Das Blatt verfärbt sich langsam von Grün nach Rot
      ...
    }

    Hoffe, das hilft erst einmal weiter.
    Tobi

    • Dieses Thema wurde geändert vor 2 Monate, 3 Wochen von  Tobias Breiner.
    • Dieses Thema wurde geändert vor 2 Monate, 3 Wochen von  Tobias Breiner.
    • Dieses Thema wurde geändert vor 2 Monate, 3 Wochen von  Tobias Breiner.
Ansicht von 1 Beitrag (von insgesamt 1)
Antwort auf: Verschoben: Antwort auf: Materialfarben ändern
Deine Information: