【问题标题】:Question About Alpha Blending in Direct3D9关于 Direct3D9 中 Alpha 混合的问题
【发布时间】:2019-12-26 20:44:25
【问题描述】:

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

   d3ddev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
   d3ddev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

【问题讨论】:

    标签: c++ directx alpha direct3d alphablending


    【解决方案1】:

    D3D 中的Alpha blending 就是按照这个等式完成的

    颜色 = TexelColor x SourceBlend + CurrentPixelColor x DestBlend

    您引用的设置将“SourceBlend”设置为源纹理的 alpha 值。 DestBlend 的值设置为 1 减去源纹理的 alpha 值。这是经典的post-blending 设置。这种模式用于“消除锯齿”图像,例如模糊圆的边缘,使它们看起来不像素化。它非常适合烟雾效果或塑料等半透明物体。
    为什么一定要指定呢?好吧,如果您将 DestBlend 设置为始终为一个,您会得到一种“重影”效果,就像您在玻璃窗格中看到部分反射一样。与environment map 一起使用时,此效果特别好。 Pre-blending 也很有用,但需要您更改输入的格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多