2010-11-21 60 views
6

讓我在房間中央有一些網格(例如球體),充滿了立方體和一個光源。我怎樣才能使快速和容易陰影投射在OpenGL中,只使用「標準」(固定)功能?注意:結果也必須包含立方體和球體陰影。如何在OpenGL中創建不帶陰影的快速和簡單的場景獨立陰影

+1

BTW-「標準函數」並不是你正在尋找的表達式。 「固定功能」更像它,但着色器是現在已經「標準化」的幾年。 – Kos 2010-11-21 18:19:54

+0

是的,我在想如何在編寫我的問題時調用這個。現在已經修復了,謝謝! =) – shybovycha 2010-11-21 18:24:05

回答

4

如果您可以生成球體的輪廓,那麼您可以使用shadow volumes。 nVidia硬件也同時支持固定功能shadow mapping

陰影體積具有填充率要求非常高的缺點。陰影地圖可以更好,但需要額外的傳球。

如果你投射到一架飛機上,它可能會更容易,只是project the object on to a plane

+0

重點是使用通用算法 - 不僅僅適用於球體輪廓=)但是,無論如何,謝謝! =) – shybovycha 2010-11-21 16:23:20

+0

抱歉,沒有點擊第二個鏈接有點......沒錯,你是對的,陰影映射是不錯,我發現它自己(愚蠢的我)=) – shybovycha 2010-11-21 18:11:15

+0

@shybovycha:就這樣你知道。上面列出的技術都不適用於球體;) – Goz 2010-11-21 21:38:38

2

沒有快速簡單的方法。有很多不同的技術,每個都有自己的優點和缺點。您可以看看我在github上託管的項目,它使用非常簡單的代碼創建陰影,並使用陰影體積技術(http://iuiz.github.com/VolumeShadow/)。不過,它是用Java編寫的,但不應該很難將其轉換爲任何其他語言。

創建陰影的最重要方法是所謂的「陰影映射」方法,在該方法中,您將場景(光源處的相機,指向每個陰影投射對象)渲染爲紋理。第二種技術是shadow voulume方法(以Doom3着名)。

+0

謝謝,但我已經有了這個想法=)投影陰影會足夠=) – shybovycha 2010-11-21 16:24:53

1

我發現了一種使用StencilBuffers的方法。有一段時間有點困惑,我終於明白了 - 最難的事情就是循環播放每個光源並投影所有場景對象。這看起來比紋理陰影更漂亮,並且工作速度比volumeric陰影更快。 herehere是一些資源,這有助於我理解矩陣乘法步驟(當我查看dino演示時,它讓我感到困惑)。至於我,這種方法最容易理解和使用。要解決的唯一問題是如何計算乘法矩陣。

儘管此方法可以使用紋理as shown here進行一些更改。

謝謝大家! =)