Эксперт
-
Автор темы
- #1
Как вы знаете, гений на иммортале, сделал великолепный рендер 3д кругов через треугольники, соответственно, у вас рендерилось point / 2 треугольников, мой шикарный код сделает так, чтобы у вас рендерился всего 1 полигон(гондон) (ну и полилайн для обводки), с вас номер карты(не забудьте ccv код)
друв_манагер.сипипи (draw_manager.cpp)
друв_манагер.аш (draw_manager.h)
сися(SS):
P.S: у кого рендер на емхуи, ждите vertex на imvec2 меняйте, и будут вам кружки
друв_манагер.сипипи (draw_manager.cpp)
C++:
void render::TexturedPolygon(int n, std::vector<Vertex_t> vertice, Color color)
{
auto g_VGuiSurface = m_surface();
static int texture_id = g_VGuiSurface->CreateNewTextureID(true); //
static unsigned char buf[4] = { 255, 255, 255, 255 };
g_VGuiSurface->DrawSetTextureRGBA(texture_id, buf, 1, 1); //
g_VGuiSurface->DrawSetColor(color); //
g_VGuiSurface->DrawSetTexture(texture_id); //
g_VGuiSurface->DrawTexturedPolygon(n, vertice.data()); //
}
void render::TexturedPolyline(int n, std::vector<Vertex_t> vertice, Color color)
{
auto g_VGuiSurface = m_surface();
static int texture_id = g_VGuiSurface->CreateNewTextureID(true); //
static unsigned char buf[4] = { 255, 255, 255, 255 };
g_VGuiSurface->DrawSetTextureRGBA(texture_id, buf, 1, 1); //
g_VGuiSurface->DrawSetColor(color); //
g_VGuiSurface->DrawSetTexture(texture_id); //
g_VGuiSurface->DrawTexturedPolyLine(vertice.data(), n); //
}
void render::Draw3DFilledCircle(const Vector& origin, float radius, Color color, Color color_fill, float points)
{
auto screen = ZERO;
if (!math::world_to_screen(origin, screen))
return;
static float Step = (M_PI * 2.0f) / (points);
std::vector<Vertex_t> point;
for (float lat = 0.f; lat <= M_PI * 2.0f; lat += Step)
{
const auto& point3d = Vector(sin(lat), cos(lat), 0.f) * radius;
Vector point2d;
if (math::world_to_screen(origin + point3d, point2d))
point.push_back(Vector2D(point2d.x, point2d.y));
}
TexturedPolygon(point.size(), point, color_fill);
TexturedPolyline(point.size(), point, color);
}
Код:
void Draw3DFilledCircle(const Vector& origin, float radius, Color color, Color color_fill, float point = 72.f);
void TexturedPolygon(int n, std::vector<Vertex_t> vertice, Color color);
void TexturedPolyline(int n, std::vector<Vertex_t> vertice, Color color);
P.S: у кого рендер на емхуи, ждите vertex на imvec2 меняйте, и будут вам кружки