Вопрос Surface render gradient line

Участник
Статус
Оффлайн
Регистрация
12 Мар 2019
Сообщения
756
Реакции[?]
248
Поинты[?]
1K
Как можно реализовать draw filled rectangle с градиентом ?
EN: How can I implement a draw filled rectangle with a gradient ?
 
Начинающий
Статус
Оффлайн
Регистрация
31 Окт 2020
Сообщения
70
Реакции[?]
8
Поинты[?]
2K
C++:
void Drawing::DrawRectGradientVertical(int x, int y, int width, int height, Color color1, Color color2)
{
    float flDifferenceR = (float)(color2.r() - color1.r()) / (float)height;
    float flDifferenceG = (float)(color2.g() - color1.g()) / (float)height;
    float flDifferenceB = (float)(color2.b() - color1.b()) / (float)height;
    float flDifferenceA = (float)(color2.a() - color1.a()) / (float)height;


    for (float i = 0.f; i < height; i++)
    {
        Color colGradient = Color(color1.r() + (flDifferenceR * i), color1.g() + (flDifferenceG * i), color1.b() + (flDifferenceB * i), color1.a() + (flDifferenceA * i));

        Drawing::DrawRect(x, y + i, width, 1, colGradient);
    }
}



void Drawing::DrawRectGradientHorizontal(int x, int y, int width, int height, Color color1, Color color2)
{
    float flDifferenceR = (float)(color2.r() - color1.r()) / (float)width;
    float flDifferenceG = (float)(color2.g() - color1.g()) / (float)width;
    float flDifferenceB = (float)(color2.b() - color1.b()) / (float)width;
    float flDifferenceA = (float)(color2.a() - color1.a()) / (float)width;


    for (float i = 0.f; i < width; i++)
    {
        Color colGradient = Color(color1.r() + (flDifferenceR * i), color1.g() + (flDifferenceG * i), color1.b() + (flDifferenceB * i), color1.a() + (flDifferenceA * i));
        Drawing::DrawRect(x + i, y, 1, height, colGradient);
    }
}
DrawRect = rect filled
 
Участник
Статус
Оффлайн
Регистрация
12 Мар 2019
Сообщения
756
Реакции[?]
248
Поинты[?]
1K
C++:
void Drawing::DrawRectGradientVertical(int x, int y, int width, int height, Color color1, Color color2)
{
    float flDifferenceR = (float)(color2.r() - color1.r()) / (float)height;
    float flDifferenceG = (float)(color2.g() - color1.g()) / (float)height;
    float flDifferenceB = (float)(color2.b() - color1.b()) / (float)height;
    float flDifferenceA = (float)(color2.a() - color1.a()) / (float)height;


    for (float i = 0.f; i < height; i++)
    {
        Color colGradient = Color(color1.r() + (flDifferenceR * i), color1.g() + (flDifferenceG * i), color1.b() + (flDifferenceB * i), color1.a() + (flDifferenceA * i));

        Drawing::DrawRect(x, y + i, width, 1, colGradient);
    }
}



void Drawing::DrawRectGradientHorizontal(int x, int y, int width, int height, Color color1, Color color2)
{
    float flDifferenceR = (float)(color2.r() - color1.r()) / (float)width;
    float flDifferenceG = (float)(color2.g() - color1.g()) / (float)width;
    float flDifferenceB = (float)(color2.b() - color1.b()) / (float)width;
    float flDifferenceA = (float)(color2.a() - color1.a()) / (float)width;


    for (float i = 0.f; i < width; i++)
    {
        Color colGradient = Color(color1.r() + (flDifferenceR * i), color1.g() + (flDifferenceG * i), color1.b() + (flDifferenceB * i), color1.a() + (flDifferenceA * i));
        Drawing::DrawRect(x + i, y, 1, height, colGradient);
    }
}
I have a feeling that my fps will be 10
 
Участник
Статус
Оффлайн
Регистрация
12 Мар 2019
Сообщения
756
Реакции[?]
248
Поинты[?]
1K
Легенда форума
Статус
Оффлайн
Регистрация
16 Сен 2018
Сообщения
4,002
Реакции[?]
1,946
Поинты[?]
7K
Участник
Статус
Оффлайн
Регистрация
12 Мар 2019
Сообщения
756
Реакции[?]
248
Поинты[?]
1K
Пожалуйста, авторизуйтесь для просмотра ссылки.
no work
Ты уверен(а) что у тебя панель, координаты и все остальное правильно? На луа у меня оно у меня рендерило нормально месяцок назад
Ну да, всё вроде как указал правильно.
C++:
void Drawing::DrawRectGradientVertical(int x, int y, int width, int height, Color color1, Color color2)
{
    float flDifferenceR = (float)(color2.r() - color1.r()) / (float)height;
    float flDifferenceG = (float)(color2.g() - color1.g()) / (float)height;
    float flDifferenceB = (float)(color2.b() - color1.b()) / (float)height;
    float flDifferenceA = (float)(color2.a() - color1.a()) / (float)height;


    for (float i = 0.f; i < height; i++)
    {
        Color colGradient = Color(color1.r() + (flDifferenceR * i), color1.g() + (flDifferenceG * i), color1.b() + (flDifferenceB * i), color1.a() + (flDifferenceA * i));

        Drawing::DrawRect(x, y + i, width, 1, colGradient);
    }
}



void Drawing::DrawRectGradientHorizontal(int x, int y, int width, int height, Color color1, Color color2)
{
    float flDifferenceR = (float)(color2.r() - color1.r()) / (float)width;
    float flDifferenceG = (float)(color2.g() - color1.g()) / (float)width;
    float flDifferenceB = (float)(color2.b() - color1.b()) / (float)width;
    float flDifferenceA = (float)(color2.a() - color1.a()) / (float)width;


    for (float i = 0.f; i < width; i++)
    {
        Color colGradient = Color(color1.r() + (flDifferenceR * i), color1.g() + (flDifferenceG * i), color1.b() + (flDifferenceB * i), color1.a() + (flDifferenceA * i));
        Drawing::DrawRect(x + i, y, 1, height, colGradient);
    }
}
DrawRect = rect filled
works, but damn it is done through crutches :/
 
Участник
Статус
Оффлайн
Регистрация
12 Мар 2019
Сообщения
756
Реакции[?]
248
Поинты[?]
1K
Тему можно закрывать, нашёл более правильный метод реализации данной функции.
 
Сверху Снизу