- Статус
- Оффлайн
- Регистрация
- 15 Янв 2021
- Сообщения
- 511
- Реакции
- 336
Добрый день югейм. Решил слезть с иглы ImGui и попробовать себя в рендере меню на DirectX скорее чисто для опыта, да и самому писать иногда приятнее. В общем проблема следующая, есть некоторый код рендера FilledRect, который рендерит практически как надо, но, как в анекдоте, есть нюанс, а именно линии вокруг самого прямоугольника, в 1 пиксель проходит линия которая будто бы имеет 50% альфы от всего цвета ( см. скрин ). В чем может быть проблема ? А так же очень странные точно такие же пустые пиксели по диагонали при бордера и неправильно рендерится левый нижний угол, хотя вспомнив векторную алгебру с 8 класса всё должно быть нормально.
Так же отключал антиалиасинг при рендере, но это не давало никакого результата. Использую DX девайс самой игры. Вот код:
Само окно менюшки
Странные линии вокруг прямоугольника
Такие же пустые пиксели по диагонали для бордеров
Странные линии вокруг прямоугольника
Такие же пустые пиксели по диагонали для бордеров
Так же отключал антиалиасинг при рендере, но это не давало никакого результата. Использую DX девайс самой игры. Вот код:
Рендер окна:
void CWindow::Render()
{
HandleMovement();
// Backgound rect render
g_pRender->FilledRectangle(m_vec2Pos, m_vec2Size, m_colBackgroundColor);
// TEST: Borders render
g_pRender->Rectangle(m_vec2Pos, m_vec2Size, CColor(8, 8, 8));
g_pRender->Rectangle(m_vec2Pos - CVector2(1, 1), m_vec2Size + CVector2(1, 1), CColor(8, 8, 8));
g_pRender->Rectangle(m_vec2Pos - CVector2(2, 2), m_vec2Size + CVector2(2, 2), CColor(8, 8, 8));
// Header
RenderHeader();
}
FilledRectangle:
void CRender::FilledRectangle(CVector2 vec2Pos, CVector2 vec2Size, CColor colColor)
{
m_pRenderDevice->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE);
const auto toX = vec2Pos.x + vec2Size.x;
const auto toY = vec2Pos.y + vec2Size.y;
const auto col = colColor.GetD3D9Color();
Vertex_t vert[5] =
{
{ vec2Pos.x, vec2Pos.y, 0.0f, 1.0f, col },
{ toX, vec2Pos.y, 0.0f, 1.0f, col },
{ toX, toY, 0.0f, 1.0f, col },
{ vec2Pos.x, toY, 0.0f, 1.0f, col },
{ vec2Pos.x, vec2Pos.y, 0.0f, 1.0f, col }
};
m_pRenderDevice->SetTexture(0, nullptr);
m_pRenderDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 3, &vert, sizeof(Vertex_t));
}
Rectangle:
void CRender::Rectangle(CVector2 vec2Pos, CVector2 vec2Size, CColor colColor)
{
const auto toX = vec2Pos.x + vec2Size.x;
const auto toY = vec2Pos.y + vec2Size.y;
const auto col = colColor.GetD3D9Color();
Vertex_t vert[5] =
{
{ vec2Pos.x, vec2Pos.y, 0.0f, 1.0f, col },
{ toX, vec2Pos.y, 0.0f, 1.0f, col },
{ toX, toY, 0.0f, 1.0f, col },
{ vec2Pos.x, toY, 0.0f, 1.0f, col },
{ vec2Pos.x, vec2Pos.y, 0.0f, 1.0f, col }
};
m_pRenderDevice->SetTexture(0, nullptr);
m_pRenderDevice->DrawPrimitiveUP(D3DPT_LINESTRIP, 4, &vert, sizeof(Vertex_t));
}