Рендеринг объектов в фоновом режиме D3D11 - PullRequest
1 голос
/ 23 июня 2019

Я пытаюсь сделать два прямоугольника.Я хочу, чтобы один, синий, отображался поверх другого, белого цвета.Это мой код для этого:

auto first = new CDrawable( );
auto second = new CDrawable( );

first->Rectangle( { 0.0, 0, 200, 100 }, color_t( { 255, 255, 255, 100 } ) );
second->Rectangle( { 20, 20, 50, 50 }, color_t( { 0, 0, 255, 255 }) );

first находится в (0, 0) с размером (200, 100).second расположен в (20, 20) с размером (50, 50).Затем я начинаю свою рамку и рисую их так:

DRAW.BeginFrame( );
first->Draw( );
second->Draw( );
DRAW.EndFrame( );

Вот что из этого получается:

enter image description here

Не должен ли прямоугольник second быть нарисован поверх first?Когда я переключаю порядок рендеринга, так что second рисуется первым, а first рисуется вторым так:

DRAW.BeginFrame( );
second->Draw( );
first->Draw( );
DRAW.EndFrame( );

Это отображается:

enter image description here

Отлично!Это оказывает!но теперь альфа-смешение не работает.Когда я понижаю прозрачность синего прямоугольника до 100 и меняю альфу белого прямоугольника на 255, это то, что отображается:

enter image description here

Вместо того, чтобы смешиваться с белым прямоугольником, он просто становится темнее.Я думаю, что причина этого в том, что с ним нечего смешивать, потому что он отображается перед белым прямоугольником.Если это так, есть ли способ сделать D3D11 похожим на D3D9, где я могу рендерить фоновые объекты, а затем объекты переднего плана и размещать их друг над другом?Если нет, есть ли другое решение для этого?

...