1.如何實現(xiàn)霧化
實現(xiàn)霧化的方式由多種,這里使用最簡單的一種:線性霧化(linear fog)。在線性霧化中,某一點的霧化程度取決于它與視點之間的距離,距離越遠(yuǎn)霧化程度越高。線性霧化有起點和終點,起點表示開始霧化之處,終點表示完全霧化之處兩點之間某一點的霧化程度與該點與視點的距離呈線性關(guān)系。比終點更遠(yuǎn)的點完全霧化了,即完全看不見了。
某一點霧化的程度可以被定義為霧化因子(fog factor),并在線性霧化公式中被計算出來:
<霧化因子> = (<終點> - <當(dāng)前點與視點間的距離>) / (<終點> - <起點>)
這里:
<起點> <= <當(dāng)前點與視點間的距離> <= <終點>
霧化因子為1.0,表示該點完全沒有被霧化,可以很清晰地看到此處的物體。如果為0.0, 就表示改點完全被霧化了。起點因子的線形圖如下所示:
2.片元著色器中包含霧化因子的片元顏色計算
計算公式如下:
<片元顏色> = <物體表面顏色> * <霧化因子> + <霧化顏色> * (1 - <霧化因子>)
3.使用頂點的w分量作為當(dāng)前點與視點間的距離
之前,我們并未顯示使用過gl_Position的w分量,實際上,這個w分量的值就是頂點的視圖坐標(biāo)的z分量乘以-1。在視圖坐標(biāo)系中,視點在原點,視線沿著Z軸負(fù)方向,觀察者看到的物體其視圖坐標(biāo)系值z分量都是負(fù)的,而gl_Position的w分量正好是z分量值乘以-1,所以可以直接使用