• MONEY за подписку! Ничего делать не надо совсем, всего-то подписаться на тг одмена и нажать кнопку "Принять участие" в розыгрыше: https://t.me/govthing/7650

Вопрос Закругление краёв d3d

Всем Рептилойдам - Рен ТВ
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
1 Фев 2020
Сообщения
542
Реакции
92
Есть у меня значит бордер. Мне же нужно сделать закругление его краёв.

C++:
Expand Collapse Copy
    void DrawBorder(float x, float y, float w, float h, DWORD Color) {
        D3DTLVERTEX Vertex[5] =
        {
            D3DTLVERTEX(x, y, 0.0f, Color),
            D3DTLVERTEX(x + w, y, 0.0f, Color),
            D3DTLVERTEX(x + w, y + h, 0.0f, Color),
            D3DTLVERTEX(x, y + h, 0.0f, Color),
            D3DTLVERTEX(x, y, 0.0f, Color)
        };
        Device->SetTexture(0, NULL);
        Device->SetPixelShader(0);
        Device->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);
        Device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
        Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
        Device->SetRenderState(D3DRS_ZENABLE, FALSE);
        Device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
        Device->DrawPrimitiveUP(D3DPT_LINESTRIP, 4, Vertex, sizeof(D3DTLVERTEX));
    }
Вопрос: как?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Есть у меня значит бордер. Мне же нужно сделать закругление его краёв.

C++:
Expand Collapse Copy
    void DrawBorder(float x, float y, float w, float h, DWORD Color) {
        D3DTLVERTEX Vertex[5] =
        {
            D3DTLVERTEX(x, y, 0.0f, Color),
            D3DTLVERTEX(x + w, y, 0.0f, Color),
            D3DTLVERTEX(x + w, y + h, 0.0f, Color),
            D3DTLVERTEX(x, y + h, 0.0f, Color),
            D3DTLVERTEX(x, y, 0.0f, Color)
        };
        Device->SetTexture(0, NULL);
        Device->SetPixelShader(0);
        Device->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);
        Device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
        Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
        Device->SetRenderState(D3DRS_ZENABLE, FALSE);
        Device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
        Device->DrawPrimitiveUP(D3DPT_LINESTRIP, 4, Vertex, sizeof(D3DTLVERTEX));
    }
Вопрос: как?
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
На самом деле это достаточно дорогая операция.
Сперва нужно разобраться как рисуются разные фигуры вообще.
Все отрисовывается из треугольников называемые полигонами, из них можно получить любую фигуру, например прямоугольник это два треугольника, а круг это множество треугольников из центра (как пицца), при этом чем больше треугольников, тем детализирование получается круг.
Закругленные прямоугольники имееют на каждом углу 1/4 круга, соответственно можешь представить насколько это ресурсозатратно рендерить.
Теперь сам вопрос, ты можешь либо сгенерировать всю эту геометрию описав вершины (что займет много времени), либо перестать заниматься фигней рендеря через сырой DirectX и взять фреймворк который может рендерить на разных бэкэндах, например в imgui неплохая система отрисовки, изучай ImDrawList, там есть все нужные тебе функции.
polygons.png
 
Назад
Сверху Снизу