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

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

C++:
    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));
    }
Вопрос: как?
 
Забаненный
Статус
Оффлайн
Регистрация
11 Май 2020
Сообщения
115
Реакции[?]
91
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Есть у меня значит бордер. Мне же нужно сделать закругление его краёв.

C++:
    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));
    }
Вопрос: как?
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
На самом деле это достаточно дорогая операция.
Сперва нужно разобраться как рисуются разные фигуры вообще.
Все отрисовывается из треугольников называемые полигонами, из них можно получить любую фигуру, например прямоугольник это два треугольника, а круг это множество треугольников из центра (как пицца), при этом чем больше треугольников, тем детализирование получается круг.
Закругленные прямоугольники имееют на каждом углу 1/4 круга, соответственно можешь представить насколько это ресурсозатратно рендерить.
Теперь сам вопрос, ты можешь либо сгенерировать всю эту геометрию описав вершины (что займет много времени), либо перестать заниматься фигней рендеря через сырой DirectX и взять фреймворк который может рендерить на разных бэкэндах, например в imgui неплохая система отрисовки, изучай ImDrawList, там есть все нужные тебе функции.
polygons.png
 
Сверху Снизу