Ogre陰影實現原理解析

2021-06-20 16:17:30 字數 687 閱讀 9277

顧名思義,陰影錐陰影其實就是建立乙個椎體。

我們以光源位置為起點,和需要產生陰影的物體的外圍輪廓(光源作為參考位置)連線然後無限延伸,這樣就得到了乙個椎體,利用這個椎體做模板測試。

我們把面對攝像機為正面的椎體麵先繪製一遍,在相應的模板位置+1

我們把背對攝像機為反面的椎體面再繪製一遍,在相應的模板位置-1

最終模板測試的時候,模板數值》=1的就為陰影點,否則則不是

因為陰影錐無限延伸也不會造成變形,所以陰影錐產生的陰影是不會有鋸齒邊的,但是因為計算陰影錐失效率降低了很多,故大場景實時陰影用此方法不可取

紋理陰影相對來說就會複雜一點了,但是好處也很多,後面再詳細敘述

第一步,我們先建立一張rtt紋理,用於渲染陰影。在光源點建立乙個攝像機(計算出檢視投影矩陣為m1),將需要產生陰影的物體渲染一遍,注意此時渲染到上一步建立的紋理上面,並且只需要渲染深度值到紋理就行了(記錄紋理為t1),這樣第一步就完成了

第二步,我們利用shader程式設計在頂點程式裡面,將m1、t1傳入到gpu裡面,當渲染乙個頂點p的時候,我們先計算出頂點的世界座標pw,利用pw和m1計算出在m1矩陣下投影出的位置pm1,取x,y為紋理座標,取出ti裡面的深度值,與pm1深度值作比較,若比pm1大,則說明是陰影,進行下一步的陰影混合

第三步,在片段程式裡面進行陰影混合即可

其實想想,cf裡面的噴塗,其實實現方式應該和上述紋理陰影很類似。

SAP BADI 實現原理解析

最近幾天發現這篇文章被單擊的次數比較高,這裡把文件內容再充實一下 本文談得是sap badi 機制背後的一些設計問題,關於如何使用badi 請參考 在sap系統中 badi 相關類的 類圖 如下 下面能過 分析 badi 機制背後的一些設計問題 1.定義指向badi inte ce的referenc...

c c const實現原理解析

丟擲問題 下列 輸出的結果是什麼?include includeusing namespace std int main resault 100 10講解學習 原理在c 中,被const修飾的變數,可能為其分配儲存空間,也可能不分配儲存空間。有下面兩種情況,會為這個變數分配儲存空間 1 當const...

耦合實現Spring IOC原理解析

文章結束給大家來個程式設計師笑話 m 首先恭喜守巨集同學找到了自己心儀的工作,入職的事件終於塵埃落定,也算是乙個新的開始吧。和守巨集聊天的時候也說了很多有關工作的事件,暢想了以後美妙的未來,也想到了以後的各種困難。不說別的就是單單在北京住房這一項就夠任何乙個職場上的人忙上好幾年的。英國天氣無常,所以...