C++ 关于Direct3D9中Alpha混合的问题

C++ 关于Direct3D9中Alpha混合的问题,c++,directx,alpha,direct3d,alphablending,C++,Directx,Alpha,Direct3d,Alphablending,我需要使游戏中的一个对象透明,但它不能正常工作。因此,经过一些研究,我后来发现了如何在Direct3D9中正确地进行alpha混合,并实现了一些代码以使对象最终透明。然而,虽然我有一个基本的想法,但我仍然有点困惑它是如何工作的。我做了很多研究,但我只找到了非常模糊的答案,这让我更加困惑。那么,这两行代码的真正含义和作用是什么 d3ddev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); d3ddev->SetRend

我需要使游戏中的一个对象透明,但它不能正常工作。因此,经过一些研究,我后来发现了如何在Direct3D9中正确地进行alpha混合,并实现了一些代码以使对象最终透明。然而,虽然我有一个基本的想法,但我仍然有点困惑它是如何工作的。我做了很多研究,但我只找到了非常模糊的答案,这让我更加困惑。那么,这两行代码的真正含义和作用是什么

   d3ddev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
   d3ddev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
在D3D中,根据该方程进行计算

颜色=TexelColor x SourceBlend+CurrentPixelColor x DestBlend

引用的设置将“SourceBlend”设置为源纹理的alpha值。DestBlend的值设置为1减去源纹理的alpha值。这是一个经典的设置。这种模式用于“反锯齿”图像,例如模糊圆的边缘,使其看起来不象像素。它对烟雾效果或塑料等半透明物体非常有效。
为什么要具体说明呢?如果你将DestBlend设置为始终为1,你会得到一种“重影”效果,就像你在一块玻璃上看到部分反射一样。这种效果特别好时,使用了一个。也可能有用,但需要更改输入的格式