體積霧的一種簡單實現

2021-10-25 04:13:20 字數 790 閱讀 1745

場景裡面一開始加的是預設的opengl霧效,效果不太好,看起來立體感不強,然後打算加個體積霧效果,搜了一些體積霧的實現方式,發現略複雜,就想了種比較簡單的實現方式;

1、在場景的垂直高度上,一般是z軸,建立若干個水平的平面,大小要比場景大,疊在一起之後看起來效果類似乙個立方體;我是從z的-5到20,建立了25個平面;

2、在片元著色器裡,根據gl_fragcoord.z的大小,計算霧的濃度,進而計算霧的顏色,如:

float fogfactor = pow(gl_fragcoord.z, 1000);

fogfactor = min(fogfactor, 0.7);

fragcolor = vec4(fogcolor, fogfactor);

3、這時候霧的遠端看起來比較生硬,沒有乙個過渡的效果,如

4、在場景的遠端四周,建立4個垂直的面,在片元著色器裡根據對應麵中片元的高度值在霧顏色和全透明顏色之間做乙個線性插值,如:

fragcolor = mix(vec4(fogcolor, 1.0), vec4(0.0), worldpos.z / 200);
5、這是算出來的霧的顏色,之後顯示卡再將霧顏色和片元的顏色blend之後,就是最上面的圖的效果了。

霧的簡單實現

霧是黃色,遠處的霧更加濃,看不見物體的紋理,首先給出的是支援線性計算的頂點著色器,器 如下 uniform mat4 umvpmatrix 總變換矩陣 uniform mat4 ummatrix 變換矩陣 uniform vec3 ulightlocation 光源位置 uniform vec3 u...

一種簡單查詢峰值的函式實現

最近經常用到查詢峰值的函式 已有的函式要不 量比較大,要不就是邏輯比較複雜 設定的條件比較多,當然對於需要篩選出很合適的峰值來說,這些條件是必須的,對於紛繁複雜的波形中查詢到你想要的那個波峰,需要慧眼 但是對於波形很多的資料,不需要那麼繁瑣的邏輯判斷,根據自己的經驗,寫了乙個 雛形,用來查詢峰值,當...

一種分頁的實現

以下 是一種分頁的實現。分別是檔案page.php和page.css。分頁的糾結點在於分頁條中省略號的顯示。實現的基本邏輯是 1,接收瀏覽器端傳過來的想要顯示的頁碼數 page。page get p 2,根據頁碼數 page 以及固定的每頁顯示數 pagesize 從資料庫中取資料。sql sele...