-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Во всех исходниках, которые постят люди я не находил вообще нормального рендера 3д круга на имгуе, так что нуждающиеся пусть получат.
Вот функции рендера просто залитого круга с обводкой, и с обводкой которая играет роль прогрес бара как в одном чите популярном.
Почему лучше использовать мой метод?
1. Основная реализация в других исходниках - костыль через render_line. Во первых он бьет по оптимизации, во вторых - когда кругов много, особенно если это саунд есп может произойти краш имгуя ругающийся на переполнение вертексами.
2. В слитых рендерах таких кругов есть куча багов,например если стоять в круге - он пропадает или обрезается и т.д.
Поясняю за количество точек: когда количество точек равно трем радиусам получается идеальный круг. Когда вызываете эти функции и передается количество точек стоит учитывать этот момент чтоб не получить обрубанную картошку вместо красивого круга
Вот функции рендера просто залитого круга с обводкой, и с обводкой которая играет роль прогрес бара как в одном чите популярном.
Почему лучше использовать мой метод?
1. Основная реализация в других исходниках - костыль через render_line. Во первых он бьет по оптимизации, во вторых - когда кругов много, особенно если это саунд есп может произойти краш имгуя ругающийся на переполнение вертексами.
2. В слитых рендерах таких кругов есть куча багов,например если стоять в круге - он пропадает или обрезается и т.д.
C++:
void render::render_circle_3d_filled_border(const Vector vecPosition, const int32_t iPointCount, const float_t flRadius, Color a_color, float width)
{
float_t flStep = (float_t)(3.14159265358979323846f) * 2.0f / (float_t)(iPointCount);
std::vector<ImVec2> m_points;
for (float a = 0; a < (3.14159265358979323846f * 2.0f); a += flStep)
{
Vector vecStart = Vector(flRadius * cosf(a) + vecPosition.x, flRadius * sinf(a) + vecPosition.y, vecPosition.z);
Vector vecEnd = Vector(flRadius * cosf(a + flStep) + vecPosition.x, flRadius * sinf(a + flStep) + vecPosition.y, vecPosition.z);
Vector vecStart2D, vecEnd2D;
g_interfaces.m_debug_overlay->ScreenPosition(vecStart, vecStart2D);
g_interfaces.m_debug_overlay->ScreenPosition(vecEnd, vecEnd2D);
m_points.push_back(ImVec2(vecEnd2D.x, vecEnd2D.y));
}
draw_list->AddConvexPolyFilled(m_points.data(), m_points.size(), GetU32(Color(a_color.r() / 255.f, a_color.g() / 255.f, a_color.b() / 255.f, a_color.a() / 255.f *0.3f)));
draw_list->AddPolyline(m_points.data(), m_points.size(), GetU32(a_color), true, width);
}
void render::render_circle_3d_filled_border_progress(const Vector vecPosition, const int32_t iPointCount, const float_t flRadius, Color a_color, float width, float progress)
{
float_t flStep = (float_t)(3.14159265358979323846f) * 2.0f / (float_t)(iPointCount);
std::vector<ImVec2> m_points;
for (float a = 0; a < (3.14159265358979323846f * 2.0f); a += flStep)
{
Vector vecStart = Vector(flRadius * cosf(a) + vecPosition.x, flRadius * sinf(a) + vecPosition.y, vecPosition.z);
Vector vecEnd = Vector(flRadius * cosf(a + flStep) + vecPosition.x, flRadius * sinf(a + flStep) + vecPosition.y, vecPosition.z);
Vector vecStart2D, vecEnd2D;
g_interfaces.m_debug_overlay->ScreenPosition(vecStart, vecStart2D);
g_interfaces.m_debug_overlay->ScreenPosition(vecEnd, vecEnd2D);
m_points.push_back(ImVec2(vecEnd2D.x, vecEnd2D.y));
}
draw_list->AddConvexPolyFilled(m_points.data(), m_points.size(), GetU32(Color(a_color.r() / 255.f, a_color.g() / 255.f, a_color.b() / 255.f, a_color.a() / 255.f * 0.3f)));
draw_list->AddPolyline(m_points.data(), m_points.size()*progress, GetU32(a_color), progress==1.f, width);
}