2015-04-20 138 views
1

我試圖給世界/相機/遊戲添加天空盒,我不知道該如何去做。如果有人可以給我一些關於如何應用它的指導,那將非常感激。我該如何應用天空盒到世界上,openGL C++

我已經加載了天空盒,我只是不知道如何正確繪製,所以它會適合在相機移動。

我設法構造了一種立方體,它可能接近天空盒,但它只能從外面看到。一旦你進入立方體,你不能從裏面看到它。也許如果我可以反轉立方體的面部,它會顯示出我在立方體內部的時間,並且可以使它變大。

從立方體外面看它 enter image description here 從內向外看 enter image description here

回答

3

我有一個類似的問題在幾個星期前,如果你正在尋找一些僞代碼,我想我或許可以幫。首先使用立方體不是最好的想法,因爲你的盒子看起來不自然,將它映射到球體以獲得平滑的效果。

  1. 建立在你的瀏覽器的邊界球體相對移動相機

  2. 應用紋理在這個領域,這將給人的印象是天空移動相對於你

  3. 當你繪製時,禁用你的z緩衝區和平截頭體(假設你使用了任何剔除算法),這將允許繪製天空盒,但是當深度排序算法被執行時將確保地形在天空盒的頂部被繪製通過OpenGL。

注意:不要忘了天空盒已經繪就後重新啓用Z緩衝,否則你的地形元素將出現在範圍之外,這意味着你只能看到天空盒。

我最近寫了一個基本的地形引擎在DirectX但校長是相當類似的,如果你想查看的回購可以find it here

查覈在this file線286看到空中包廂的呈現方式,隨後還參觀SkyBox implementation file,看看它是如何構建的,並且SkyShader implementation file看到紋理如何映射到球體,其主要方法是關注在着色器文件SetShaderParameters()

在相對天空盒移動方面只需將你的天空盒的WVP矩陣設置爲相機的WVP矩陣,然後調整x,y,天空箱的z平面根據您的喜好。

額外如果你要實現多玩家方面,只是禁用球體的背面渲染,然後每個玩家可以看到他們的SkyBox,但對手不能。或者您打造世界

希望幫助周圍的一個大球 - 如果你需要幫助了只是問,我知道這東西可以在第一:)

+1

感謝您的解釋相當密集,我不認爲我需要深入瞭解,這只是一個小項目。我原本打算像你說的那樣,像一個像照相機那樣移動的邊界球/盒子,但爲了做到這一點,我需要能夠從內部而不是外部看到盒子。任何提示,所以我不必重寫整個實施?編輯:它只是一個翻轉立方體的頂點的情況? – user

+1

顛倒面孔絕對可以讓你看到裏面的紋理,然後你需要做的就是將你的天空盒相對於相機移動 - 這樣做,用相機WVP乘以你的Skyboxes WVP,並確保你的相機在應用程序啓動時,原點處於合理的位置(確保您的相機最初位於多維數據集中) – Alex