• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Вопрос Imgui multicolor

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