Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Вопрос Не правильно рендерится круг

Участник
Участник
Статус
Онлайн
Регистрация
30 Авг 2020
Сообщения
709
Реакции
402
C++:
Expand Collapse Copy
void draw_circe(float x, float y, float radius, int resolution, DWORD color, DWORD color2, LPDIRECT3DDEVICE9 device)
{
    LPDIRECT3DVERTEXBUFFER9 g_pVB2 = nullptr;
    std::vector <CUSTOMVERTEX2> circle(resolution + 2);

    circle[0].x = x;
    circle[0].y = y;
    circle[0].z = 0.0f;

    circle[0].rhw = 1.0f;
    circle[0].color = color2;

    for (auto i = 1; i < resolution + 2; i++)
    {
        circle[i].x = (float)(x - radius * cos(D3DX_PI * ((i - 1) / (resolution / 2.0f))));
        circle[i].y = (float)(y - radius * sin(D3DX_PI * ((i - 1) / (resolution / 2.0f))));
        circle[i].z = 0.0f;

        circle[i].rhw = 1.0f;
        circle[i].color = color;
    }
C++:
Expand Collapse Copy
    render::get().circle_filled(width / 2, height / 2 - 1, 4, 4, color);
    render::get().circle_filled(width / 2 - 1, height / 1, 6, 6, color);

1608303698308.png

UPD: Круг есть, но такие треугольники по всему экрану.
 
Последнее редактирование:
C++:
Expand Collapse Copy
void draw_circe(float x, float y, float radius, int resolution, DWORD color, DWORD color2, LPDIRECT3DDEVICE9 device)
{
    LPDIRECT3DVERTEXBUFFER9 g_pVB2 = nullptr;
    std::vector <CUSTOMVERTEX2> circle(resolution + 2);

    circle[0].x = x;
    circle[0].y = y;
    circle[0].z = 0.0f;

    circle[0].rhw = 1.0f;
    circle[0].color = color2;

    for (auto i = 1; i < resolution + 2; i++)
    {
        circle[i].x = (float)(x - radius * cos(D3DX_PI * ((i - 1) / (resolution / 2.0f))));
        circle[i].y = (float)(y - radius * sin(D3DX_PI * ((i - 1) / (resolution / 2.0f))));
        circle[i].z = 0.0f;

        circle[i].rhw = 1.0f;
        circle[i].color = color;
    }

    device->CreateVertexBuffer((resolution + 2) * sizeof(CUSTOMVERTEX2), D3DUSAGE_WRITEONLY, D3DFVF_XYZRHW | D3DFVF_DIFFUSE, D3DPOOL_DEFAULT, &g_pVB2, nullptr); //-V107

    if (!g_pVB2)
        return;

    void* pVertices;

    g_pVB2->Lock(0, (resolution + 2) * sizeof(CUSTOMVERTEX2), (void**)&pVertices, 0); //-V107
    memcpy(pVertices, &circle[0], (resolution + 2) * sizeof(CUSTOMVERTEX2));
    g_pVB2->Unlock();

    device->SetTexture(0, nullptr);
    device->SetPixelShader(nullptr);
    device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
    device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
    device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

    device->SetStreamSource(0, g_pVB2, 0, sizeof(CUSTOMVERTEX2));
    device->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);
    device->DrawPrimitive(D3DPT_TRIANGLEFAN, 0, resolution);

    g_pVB2->Release();
}
 
Назад
Сверху Снизу