1.如何实现雾化

    实现雾化的方式由多种,这里使用最简单的一种:线性雾化(linear fog)。在线性雾化中,某一点的雾化程度取决于它与视点之间的距离,距离越远雾化程度越高。线性雾化有起点和终点,起点表示开始雾化之处,终点表示完全雾化之处两点之间某一点的雾化程度与该点与视点的距离呈线性关系。比终点更远的点完全雾化了,即完全看不见了。

    某一点雾化的程度可以被定义为雾化因子(fog factor),并在线性雾化公式中被计算出来:

<雾化因子> = (<终点> - <当前点与视点间的距离>) / (<终点> - <起点>)

    这里:

<起点> <= <当前点与视点间的距离> <= <终点>

    雾化因子为1.0,表示该点完全没有被雾化,可以很清晰地看到此处的物体。如果为0.0, 就表示改点完全被雾化了。起点因子的线形图如下所示:

seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训

2.片元着色器中包含雾化因子的片元颜色计算

    计算公式如下:

<片元颜色> = <物体表面颜色> * <雾化因子> + <雾化颜色> * (1 - <雾化因子>)

3.使用顶点的w分量作为当前点与视点间的距离

    之前,我们并未显示使用过gl_Position的w分量,实际上,这个w分量的值就是顶点的视图坐标的z分量乘以-1。在视图坐标系中,视点在原点,视线沿着Z轴负方向,观察者看到的物体其视图坐标系值z分量都是负的,而gl_Position的w分量正好是z分量值乘以-1,所以可以直接使用

网友评论