关于 Direct3D9 中 Alpha 混合的问题
Question About Alpha Blending in Direct3D9
我需要使游戏中的对象透明,但它无法正常工作。所以,经过一些研究,我后来发现了如何在 Direct3D9 中正确地进行 alpha 混合,并实现了一些代码使对象最终透明。然而,虽然我对它有一个基本的概念,但我仍然对它是如何工作的感到有点困惑。我做了很多研究,但我只找到了非常模糊的答案,这让我更加困惑。那么,这两行代码的真正含义和作用是什么?
d3ddev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
d3ddev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
Alpha blending在D3D中是按照这个方程
做的
Color = TexelColor x SourceBlend + CurrentPixelColor x DestBlend
您引用的设置将 "SourceBlend" 设置为源纹理的 alpha 值。 DestBlend 的值设置为一减去源纹理的 alpha 值。这是一个经典的 post-blending 设置。这种模式用于 "anti-alias" 图像,例如模糊圆的边缘,使它们看起来不像素化。这对于烟雾效果或塑料等半透明物体非常有用。
为什么一定要指定呢?好吧,如果您将 DestBlend 设置为始终为一个,您会得到一种 "ghosting" 效果,就像您在一块玻璃中看到部分反射一样。这种效果在与 environment map. Pre-blending 一起使用时特别好,也很有用,但需要您更改输入格式。
我需要使游戏中的对象透明,但它无法正常工作。所以,经过一些研究,我后来发现了如何在 Direct3D9 中正确地进行 alpha 混合,并实现了一些代码使对象最终透明。然而,虽然我对它有一个基本的概念,但我仍然对它是如何工作的感到有点困惑。我做了很多研究,但我只找到了非常模糊的答案,这让我更加困惑。那么,这两行代码的真正含义和作用是什么?
d3ddev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
d3ddev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
Alpha blending在D3D中是按照这个方程
做的Color = TexelColor x SourceBlend + CurrentPixelColor x DestBlend
您引用的设置将 "SourceBlend" 设置为源纹理的 alpha 值。 DestBlend 的值设置为一减去源纹理的 alpha 值。这是一个经典的 post-blending 设置。这种模式用于 "anti-alias" 图像,例如模糊圆的边缘,使它们看起来不像素化。这对于烟雾效果或塑料等半透明物体非常有用。
为什么一定要指定呢?好吧,如果您将 DestBlend 设置为始终为一个,您会得到一种 "ghosting" 效果,就像您在一块玻璃中看到部分反射一样。这种效果在与 environment map. Pre-blending 一起使用时特别好,也很有用,但需要您更改输入格式。