Вопрос Circle Outline [LW]

С++
Начинающий
Статус
Оффлайн
Регистрация
18 Янв 2021
Сообщения
88
Реакции[?]
8
Поинты[?]
0
Подскажите ребят либо буду благодарен примеру
Как сделать обводку круга примеры :
1620033772643.png1620033811933.png
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
Вычисляется круг в трехмерном мире, вернее его точки, сколько их будет зависеть от детализации.
Затем они перегоняются из 3д мира на экран (в 2д мир т.е. worldtoscreen), из них вычисляется контур (гугли convex hull).
И наконец по этим точкам просто рисуется из треугольников многогранник (для imgui смотри AddConvexPolyFilled) и по этим же точкам линия (для imgui смотри AddPolyline).
 
С++
Начинающий
Статус
Оффлайн
Регистрация
18 Янв 2021
Сообщения
88
Реакции[?]
8
Поинты[?]
0
Вычисляется круг в трехмерном мире, вернее его точки, сколько их будет зависеть от детализации.
Затем они перегоняются из 3д мира на экран (в 2д мир т.е. worldtoscreen), из них вычисляется контур (гугли convex hull).
И наконец по этим точкам просто рисуется из треугольников многогранник (для imgui смотри AddConvexPolyFilled) и по этим же точкам линия (для imgui смотри AddPolyline).
Не будет примера?, а то я слегка тупенький
 
С++
Начинающий
Статус
Оффлайн
Регистрация
18 Янв 2021
Сообщения
88
Реакции[?]
8
Поинты[?]
0
хочу кекать!
Начинающий
Статус
Оффлайн
Регистрация
13 Июн 2020
Сообщения
148
Реакции[?]
-42
Поинты[?]
2K
C++:
void render::Draw3DFilledCircle(const Vector& origin, float radius, Color color, float fill_alpha)
{
    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;

    color.SetAlpha(static_cast<int>(fill_alpha));

    for (auto rotation = 0.0f; rotation <= M_PI * 2.0f; rotation += step)
    {
        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(color.r(), color.g(), color.b(), 255));
                triangle(Vector2D(screen.x, screen.y), Vector2D(screenPos.x, screenPos.y), Vector2D(prevScreenPos.x, prevScreenPos.y), color);
            }
            prevScreenPos = screenPos;
        }
    }
}
 
ставь чайник, зажигай плиту
Эксперт
Статус
Оффлайн
Регистрация
22 Май 2020
Сообщения
1,444
Реакции[?]
1,092
Поинты[?]
10K
так в лв есть функция в дроу менеджере
 
Web developer / designer
Пользователь
Статус
Оффлайн
Регистрация
15 Ноя 2020
Сообщения
411
Реакции[?]
124
Поинты[?]
2K
ставь чайник, зажигай плиту
Эксперт
Статус
Оффлайн
Регистрация
22 Май 2020
Сообщения
1,444
Реакции[?]
1,092
Поинты[?]
10K
Похожие темы
Сверху Снизу