Гайд Плавное переливание цвета.

Начинающий
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
103
Реакции[?]
12
Поинты[?]
0
C++:
static float x = 0, y = 0;
        static float r = 0, g = 0, b = 0;

        if (y >= 0.0f && y < 255.0f) {
            r = 255.0f;
            g = 0.0f;
            b = x;
        }
        else if (y >= 255.0f && y < 510.0f) {
            r = 255.0f - x;
            g = 0.0f;
            b = 255.0f;
        }
        else if (y >= 510.0f && y < 765.0f) {
            r = 0.0f;
            g = x;
            b = 255.0f;
        }
        else if (y >= 765.0f && y < 1020.0f) {
            r = 0.0f;
            g = 255.0f;
            b = 255.0f - x;
        }
        else if (y >= 1020.0f && y < 1275.0f) {
            r = x;
            g = 255.0f;
            b = 0.0f;
        }
        else if (y >= 1275.0f && y < 1530.0f) {
            r = 255.0f;
            g = 255.0f - x;
            b = 0.0f;
        }

        x += 0.3;//speed
        if (x >= 255.0f)
            x = 0.0f;

        y += 0.3; //speed
        if (y > 1530.0f)
            y = 0.0f;

//пример: D3DCOLOR_ARGB(r,g,b, 255); ну или что то типо такого.
C++:
static float x = 0, y = 0;
        static float r = 0, g = 0, b = 0;

        if (y >= 0.0f && y < 255.0f) {
            r = 255.0f;
            g = 0.0f;
            b = x;
        }
        else if (y >= 255.0f && y < 510.0f) {
            r = 255.0f - x;
            g = 0.0f;
            b = 255.0f;
        }
        else if (y >= 510.0f && y < 765.0f) {
            r = 0.0f;
            g = x;
            b = 255.0f;
        }
        else if (y >= 765.0f && y < 1020.0f) {
            r = 0.0f;
            g = 255.0f;
            b = 255.0f - x;
        }
        else if (y >= 1020.0f && y < 1275.0f) {
            r = x;
            g = 255.0f;
            b = 0.0f;
        }
        else if (y >= 1275.0f && y < 1530.0f) {
            r = 255.0f;
            g = 255.0f - x;
            b = 0.0f;
        }

        x += 0.3;//speed
        if (x >= 255.0f)
            x = 0.0f;

        y += 0.3; //speed
        if (y > 1530.0f)
            y = 0.0f;

//пример: D3DCOLOR_ARGB(r,g,b, 255); ну или что то типо такого.
Залил это так как лично я не нашел исходника плавного переливания. Если вы нашли то не надо мне предъявлять пожалуйста.
 
Начинающий
Статус
Оффлайн
Регистрация
22 Сен 2018
Сообщения
52
Реакции[?]
11
Поинты[?]
1K
C++:
static float x = 0, y = 0;
        static float r = 0, g = 0, b = 0;

        if (y >= 0.0f && y < 255.0f) {
            r = 255.0f;
            g = 0.0f;
            b = x;
        }
        else if (y >= 255.0f && y < 510.0f) {
            r = 255.0f - x;
            g = 0.0f;
            b = 255.0f;
        }
        else if (y >= 510.0f && y < 765.0f) {
            r = 0.0f;
            g = x;
            b = 255.0f;
        }
        else if (y >= 765.0f && y < 1020.0f) {
            r = 0.0f;
            g = 255.0f;
            b = 255.0f - x;
        }
        else if (y >= 1020.0f && y < 1275.0f) {
            r = x;
            g = 255.0f;
            b = 0.0f;
        }
        else if (y >= 1275.0f && y < 1530.0f) {
            r = 255.0f;
            g = 255.0f - x;
            b = 0.0f;
        }

        x += 0.3;//speed
        if (x >= 255.0f)
            x = 0.0f;

        y += 0.3; //speed
        if (y > 1530.0f)
            y = 0.0f;

//пример: D3DCOLOR_ARGB(r,g,b, 255); ну или что то типо такого.
Залил это так как лично я не нашел исходника плавного переливания. Если вы нашли то не надо мне предъявлять пожалуйста.
Что это?

Проще:

math:
namespace math {
    static float repeat( float t, float length ) {
        return std::clamp<float>( t - floorf( t / length ) * length, 0.f, length );
    }

    static float pong( float t, float length ) {
        t = repeat( t, length * 2.f );
        return length - abs( t - length );
    }

    static ImVec4 lerp( ImVec4 a, ImVec4 b, float t ) {
        t = std::clamp<float>( t, 0.f, 1.f );
        return ImVec4( a.x + ( b.x - a.x ) * t, a.y + ( b.y - a.y ) * t, a.z + ( b.z - a.z ) * t, a.w + ( b.w - a.w ) * t );
    }
}

example imgui:
static float flTime = 0.f;

...

const auto color = math::lerp( ImColor( 97, 131, 255 ), ImColor( 26, 56, 163 ), math::pong( flTime, 1.f ) ); // lerp two colors

flTime = flTime + GImGui->IO.DeltaTime; // speed

...
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
103
Реакции[?]
12
Поинты[?]
0
ну вот я в принципе о чем и говорю, я просто выложил что было, нах мне ваши методы, этот работает хорошо и всем норм будет.
 
Начинающий
Статус
Оффлайн
Регистрация
27 Авг 2021
Сообщения
15
Реакции[?]
4
Поинты[?]
1K
Проще:


C++:
        static float x = 0, y = 0;
        static float r = 0, g = 0, b = 0;

        float colorSpeed = 0.003f;

        float frequency = 0.7f;
        r = 127.5f * (1 + sin(frequency * y + 0)) + 0.5f;
        g = 127.5f * (1 + sin(frequency * y + 2)) + 0.5f;
        b = 127.5f * (1 + sin(frequency * y + 4)) + 0.5f;

        y += colorSpeed;
        if (y > 1530.0f)
            y = 0.0f;
 
Будущий хацкер
Начинающий
Статус
Оффлайн
Регистрация
28 Апр 2022
Сообщения
107
Реакции[?]
13
Поинты[?]
3K
1000022768.jpg
C++:
#include <iostream>

using namespace std;

int main() {
  float x = 0.0f, y = 0.0f;
  float r = 0.0f, g = 0.0f, b = 0.0f;

  while (true) {
    // Определение цвета
    if (y >= 0.0f && y < 255.0f) {
      r = 255.0f;
      g = 0.0f;
      b = x;
    } else if (y >= 255.0f && y < 510.0f) {
      r = 255.0f - x;
      g = 0.0f;
      b = 255.0f;
    } else if (y >= 510.0f && y < 765.0f) {
      r = 0.0f;
      g = x;
      b = 255.0f;
    } else if (y >= 765.0f && y < 1020.0f) {
      r = 0.0f;
      g = 255.0f;
      b = 255.0f - x;
    } else if (y >= 1020.0f && y < 1275.0f) {
      r = x;
      g = 255.0f;
      b = 0.0f;
    } else if (y >= 1275.0f && y < 1530.0f) {
      r = 255.0f;
      g = 255.0f - x;
      b = 0.0f;
    }

    // Отображение цвета
    cout << "RGB: (" << r << ", " << g << ", " << b << ")" << endl;

    // Обновление переменных
    x += 0.3f;
    if (x >= 255.0f) {
      x = 0.0f;
    }
    y += 0.3f;
    if (y > 1530.0f) {
      y = 0.0f;
    }
  }

  return 0;
}
 
Сверху Снизу