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

Вопрос glow sf

Забаненный
Забаненный
Статус
Оффлайн
Регистрация
30 Авг 2021
Сообщения
52
Реакции
8
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Доброй ночи хочу сделать glow на разные рендеры самый простой пример это на draw3dcircle вот пример чего хочу сделать но не пойму как

Render: surface

render3dcirclefilled

C++:
Expand Collapse Copy
void render::Draw3DCircle(const Vector& origin, float radius, Color color, int thickline)
{
    auto prevScreenPos = ZERO;
    auto step = M_PI * 2.0f / 72.0f;

    auto screenPos = ZERO;
    auto screen = ZERO;

    if (!math::world_to_screen(origin, screen))
        return;

    for (auto rotation = 0.0f; rotation <= M_PI * 2.0f; rotation += step) //-V1034
    {
        Vector pos(radius * cos(rotation) + origin.x, radius * sin(rotation) + origin.y, origin.z);

        if (math::world_to_screen(pos, screenPos))
        {
            if (!prevScreenPos.IsZero() && prevScreenPos.IsValid() && screenPos.IsValid() && prevScreenPos != screenPos)
            {
                line(prevScreenPos.x, prevScreenPos.y, screenPos.x, screenPos.y, color);
            }

            prevScreenPos = screenPos;
        }
    }
}

1667161838011.png
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Тебе нужно рендерить круги от центра позиции до краев, постепенно уменьшая альфу самого круга
Да , я знаю но мне нужен пример кода так как я не понимаю как его написать
 
Smth like this
?
C++:
Expand Collapse Copy
void AddRadialGradient(ImDrawList* draw_list, const ImVec2& center, float radius, ImU32 col_in, ImU32 col_out)
{
    if (((col_in | col_out) & IM_COL32_A_MASK) == 0 || radius < 0.5f)
        return;

    // Use arc with automatic segment count
    draw_list->_PathArcToFastEx(center, radius, 0, IM_DRAWLIST_ARCFAST_SAMPLE_MAX, 0);
    const int count = draw_list->_Path.Size - 1;

    unsigned int vtx_base = draw_list->_VtxCurrentIdx;
    draw_list->PrimReserve(count * 3, count + 1);

    // Submit vertices
    const ImVec2 uv = draw_list->_Data->TexUvWhitePixel;
    draw_list->PrimWriteVtx(center, uv, col_in);
    for (int n = 0; n < count; n++)
        draw_list->PrimWriteVtx(draw_list->_Path[n], uv, col_out);

    // Submit a fan of triangles
    for (int n = 0; n < count; n++)
    {
        draw_list->PrimWriteIdx((ImDrawIdx)(vtx_base));
        draw_list->PrimWriteIdx((ImDrawIdx)(vtx_base + 1 + n));
        draw_list->PrimWriteIdx((ImDrawIdx)(vtx_base + 1 + ((n + 1) % count)));
    }
    draw_list->_Path.Size = 0;
}
 
Доброй ночи хочу сделать glow на разные рендеры самый простой пример это на draw3dcircle вот пример чего хочу сделать но не пойму как

Render: surface

render3dcirclefilled

C++:
Expand Collapse Copy
void render::Draw3DCircle(const Vector& origin, float radius, Color color, int thickline)
{
    auto prevScreenPos = ZERO;
    auto step = M_PI * 2.0f / 72.0f;

    auto screenPos = ZERO;
    auto screen = ZERO;

    if (!math::world_to_screen(origin, screen))
        return;

    for (auto rotation = 0.0f; rotation <= M_PI * 2.0f; rotation += step) //-V1034
    {
        Vector pos(radius * cos(rotation) + origin.x, radius * sin(rotation) + origin.y, origin.z);

        if (math::world_to_screen(pos, screenPos))
        {
            if (!prevScreenPos.IsZero() && prevScreenPos.IsValid() && screenPos.IsValid() && prevScreenPos != screenPos)
            {
                line(prevScreenPos.x, prevScreenPos.y, screenPos.x, screenPos.y, color);
            }

            prevScreenPos = screenPos;
        }
    }
}

Посмотреть вложение 226160
как в евольве?
1667227186932.png
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Да
Smth like this
?
C++:
Expand Collapse Copy
void AddRadialGradient(ImDrawList* draw_list, const ImVec2& center, float radius, ImU32 col_in, ImU32 col_out)
{
    if (((col_in | col_out) & IM_COL32_A_MASK) == 0 || radius < 0.5f)
        return;

    // Use arc with automatic segment count
    draw_list->_PathArcToFastEx(center, radius, 0, IM_DRAWLIST_ARCFAST_SAMPLE_MAX, 0);
    const int count = draw_list->_Path.Size - 1;

    unsigned int vtx_base = draw_list->_VtxCurrentIdx;
    draw_list->PrimReserve(count * 3, count + 1);

    // Submit vertices
    const ImVec2 uv = draw_list->_Data->TexUvWhitePixel;
    draw_list->PrimWriteVtx(center, uv, col_in);
    for (int n = 0; n < count; n++)
        draw_list->PrimWriteVtx(draw_list->_Path[n], uv, col_out);

    // Submit a fan of triangles
    for (int n = 0; n < count; n++)
    {
        draw_list->PrimWriteIdx((ImDrawIdx)(vtx_base));
        draw_list->PrimWriteIdx((ImDrawIdx)(vtx_base + 1 + n));
        draw_list->PrimWriteIdx((ImDrawIdx)(vtx_base + 1 + ((n + 1) % count)));
    }
    draw_list->_Path.Size = 0;
}
Если не ошибаюсь тут радиус начинается с 0 позиции а нужно чтоб после размера радиуса
 
Назад
Сверху Снизу