2012-05-27 96 views
1

我試圖使用OpenSceneGraph實現多遍渲染方法。但是,我不完全確定我的問題是理論上的還是由於缺乏OSG的應用知識。到目前爲止,我已經通過使用正交投影渲染成紋理成功實現了多遍渲染,但似乎無法進行透視投影。使用渲染到紋理的多遍渲染

這可能是我不太明白如何實現多通道陰影。當然,我必須使用多遍着色器將整個場景預渲染爲紋理,然後在最終渲染中使用紋理。但是,我不是在爲場景中的每個對象創建單獨的紋理,而是有效地捕獲整個呈現場景的屏幕截圖。然後,從單獨的紋理中,將渲染的效果應用到各個幾何圖形。

我認爲這意味着我將不得不對頂點着色器中的每個幾何體進行頂點座標的額外轉換。也就是說,計算後:

gl_Position = ModelViewProjectionMatrix * Vertex; 

我需要再向前邁進一步,並計算頂點的屏幕座標,以便再次頂點正確映射(,因爲紋理由現場的整個屏幕截圖)。

如果我是正確的,那麼我必須能夠在與最終渲染中使用的視圖相同的透視圖中預渲染場景,而不是正交視圖。這是我有麻煩的地方。我可以做一個正交的視圖做我想要的,但不是透視圖。

我的方法正確嗎?我能想到的唯一另一種方法是將所有東西都渲染到屏幕填充四元組(實際上,與轉換爲屏幕座標相同),但這並不能減輕在預渲染階段使用透視投影的需要。

想法?鏈接??

編輯:我還應該指出,在我的成功嘗試中,我只使用了片段着色器。透視投影工作,但是,當然,我使用的屏幕對齊四邊形是偏移而不是居中。我添加了一個傳遞頂點着色器,一切都變成空白。

回答

1

事實證明,我的方法是正確的。這是非常好的,因爲它避免了必須添加另一個攝像頭到我的場景圖來渲染最終輸出 - 我可以簡單地使用主攝像頭。不幸的是,這意味着我的所有輸出紋理都以屏幕分辨率呈現,而不是適合對象大小的分辨率。也就是說,如果我的屏幕是1024 x 1024,則輸出紋理也是如此,圖中每個預渲染相機都有一個紋理。不完全有效,但它現在會做。