Я пытаюсь сделать два прямоугольника.Я хочу, чтобы один, синий, отображался поверх другого, белого цвета.Это мой код для этого:
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( );
Вот что из этого получается:

Не должен ли прямоугольник second
быть нарисован поверх first
?Когда я переключаю порядок рендеринга, так что second
рисуется первым, а first
рисуется вторым так:
DRAW.BeginFrame( );
second->Draw( );
first->Draw( );
DRAW.EndFrame( );
Это отображается:

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

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