后台D3D11中的对象渲染

时间:2019-06-23 03:06:28

标签: c++ directx-11 direct3d

我正在尝试渲染两个矩形。我想要一个蓝色的渲染在另一个白色的顶部。这是我的代码:

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

太好了!它呈现!但现在Alpha混合不起作用。当我将蓝色矩形的透明度降低到100,并将白色矩形的alpha更改为255时,将呈现以下内容:

enter image description here

与其混合白色矩形,不如将其变暗。我认为这样做的原因是它没有任何可混合的,因为它是在白色矩形之前渲染的。如果是这种情况,是否有办法使D3D11像D3D9一样,可以在其中渲染背景对象,然后渲染前景对象,并使它们彼此堆叠?如果没有,还有其他解决方案吗?

0 个答案:

没有答案