Вопрос Imgui multicolor

Тьомчик
Участник
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
727
Реакции[?]
150
Поинты[?]
58K
Как можна сделать это плавней чтобы она не прям так выделяло смену цвета.
UPD: Я про
1732138585358.png
код:
void ImDrawList::AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_max, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left, float rounding, ImDrawFlags flags)
{
    if (((col_upr_left | col_upr_right | col_bot_right | col_bot_left) & IM_COL32_A_MASK) == 0)
        return;

    flags = FixRectCornerFlags(flags);
    rounding = ImMin(rounding, ImFabs(p_max.x - p_min.x) * (((flags & ImDrawFlags_RoundCornersTop) == ImDrawFlags_RoundCornersTop) || ((flags & ImDrawFlags_RoundCornersBottom) == ImDrawFlags_RoundCornersBottom) ? 0.5f : 1.0f) - 1.0f);
    rounding = ImMin(rounding, ImFabs(p_max.y - p_min.y) * (((flags & ImDrawFlags_RoundCornersLeft) == ImDrawFlags_RoundCornersLeft) || ((flags & ImDrawFlags_RoundCornersRight) == ImDrawFlags_RoundCornersRight) ? 0.5f : 1.0f) - 1.0f);

    const int size_before = VtxBuffer.Size;
    AddRectFilled(p_min, p_max, IM_COL32_WHITE, rounding, flags);
    const int size_after = VtxBuffer.Size;

    ImVec4 col_upr_left_f = ImGui::ColorConvertU32ToFloat4(col_upr_left);
    ImVec4 col_bot_left_f = ImGui::ColorConvertU32ToFloat4(col_bot_left);
    ImVec4 col_upr_right_f = ImGui::ColorConvertU32ToFloat4(col_upr_right);
    ImVec4 col_bot_right_f = ImGui::ColorConvertU32ToFloat4(col_bot_right);

    for (int i = size_before; i < size_after; i++) {
        ImDrawVert* vert = VtxBuffer.Data + i;

        float x_ratio = ImSaturate((vert->pos.x - p_min.x) / (p_max.x - p_min.x));
        float y_ratio = ImSaturate((vert->pos.y - p_min.y) / (p_max.y - p_min.y));

        ImVec4 top_color = ImLerp(col_upr_left_f, col_upr_right_f, x_ratio);
        ImVec4 bottom_color = ImLerp(col_bot_left_f, col_bot_right_f, x_ratio);
        ImVec4 final_color = ImLerp(top_color, bottom_color, y_ratio);

        final_color = final_color * ImGui::ColorConvertU32ToFloat4(vert->col);

        vert->col = ImColor(final_color);
    }
}
1732136963190.png
 
Последнее редактирование:
Тьомчик
Участник
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
727
Реакции[?]
150
Поинты[?]
58K
UPD: пока что у меня в голове только ShadeVertsLinearColorGradientKeepAlpha как решение.
 
Сверху Снизу