简单的介绍一下D3D9的雾
D3D9 提供了两种往场景中添加雾的方法,顶点雾和像素雾。简单的说 ,像素雾 又叫做 table fog 是在显卡驱动中计算的雾。而顶点雾是在D3D 光照引擎中计算雾。应用程序可以同时使用 顶点雾和像素雾来实现雾效。
不管用什么方法来实现雾效,都必须提供一个正确的投影矩阵,否则雾效都不正确。如果雾效不正确,请仔细检查投影矩阵。
雾的计算公式有三种:
Linear Fog
Exponential Fog
Exponential Fog(平方)
其中每个公式中都有个 d 用来计算标识雾的距离。如果是基于Z-Based Depth模式,则 d 的值就是该点的深度值,但是这种情况在旋转镜头时会出现错误。
对于像素雾,通过支持 Eye-Relative 来解决部分的错误现象,它是用 齐次坐标中的 W值来替换 Z 值来计算雾。这种方法只能部分的缓解这中错误,但是不能保证完全的精确。
对于顶点雾,可以通过支持 Range-Based Fog 可以完全精确的实现雾的精确计算。
使用 Range-Based Fog 和 Eye-Relative 都要预先判断硬件是否支持。