迷雾公式 (Direct3D 9)

C++ 应用程序可以通过更改 Microsoft Direct3D 计算远距离雾效果的方式来控制雾对场景中对象颜色的影响。 D3DFOGMODE 枚举类型包含标识三个迷雾公式的成员。 给定应用程序设置的参数,所有公式将雾因子计算为距离的函数。

线性雾

这是使用以下D3DFOG_LINEAR公式设置的。

direct3d 线性雾的公式

其中

  • start 是迷雾效果开始的距离。
  • end 是雾效果不再增加的距离。
  • d 表示深度或与视点的距离。 对于基于范围的雾,d 的值是相机位置和顶点之间的距离。 对于非基于范围的雾,d 的值是相机空间中 Z 坐标的绝对值。

指数雾

像素雾和顶点雾都支持线性公式和指数公式。

这是使用以下D3DFOG_EXP公式设置的。

direct3d 指数雾的公式

其中

  • e 是自然对数的底数 (约 2.71828) 。
  • 密度是一种任意雾密度,范围为 0.0 到 1.0。
  • d 表示深度或与视点的距离,如前所述。

这是使用以下D3DFOG_EXP2公式设置的。

direct3d 指数 2 雾的公式

其中

  • e 是上述自然对数的底数。
  • 密度是一种任意雾密度,其范围为 0.0 到 1.0,如上所述。
  • d 表示深度或与视点的距离,如上所述。

注意

系统将雾因子存储在顶点的反射颜色的 alpha 分量中。 如果应用程序执行自己的转换和照明,则可以手动插入迷雾因子值,以便系统在呈现期间应用。

 

下图显示了这些公式,这些公式使用公式参数中的常用值。

雾公式在距离和颜色量上的图

D3DFOG_LINEAR开头为 1.0,结尾为 0.0。 它不是相对于近平面或远平面测量的。

当 Direct3D 计算雾效果时,它将使用以下混合公式中上述公式之一的雾因子。

direct3d 的雾效果公式

此公式通过雾因子 f 有效地缩放当前多边形 C 的颜色,并将积添加到雾色 C,按雾因子的按位反比缩放。 生成的颜色值是雾色和原始颜色的混合,作为距离的一个因子。 该公式适用于 Microsoft DirectX 7.0 及更高版本中支持的所有设备。 对于旧式斜坡设备,雾因数会缩放漫射和反射颜色分量,限制在 0.0 和 1.0 范围内(包括 0.0 和 1.0)。 对于近平面,雾因数通常从 1.0 开始,在远平面降至 0.0。

迷雾类型