Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Imgui multicolor

Участник
Участник
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
801
Реакции
160
Как можна сделать это плавней чтобы она не прям так выделяло смену цвета.
UPD: Я про
1732138585358.png
код:
Expand Collapse Copy
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
 
Последнее редактирование:
Назад
Сверху Снизу