設定霧最重要的是,這跟你想像的不一樣並不是在空的場景中新增一個霧的實體。霧相當於一個遮罩在你的是現前面。

這有些影響,最直接的影響是,當你是也沒有物體時,妳就看不到霧的效果。事實上,你將會看到視野中背景的顏色。

為了使霧的效果正確的呈現,我們必須將背景設成霧的顏色。

霧的介紹
有兩個基本的霧型態,線性及指數的型態。線性的霧在線性的型態比較濃,而指數的霧,濃度以指數的方式呈現。
這兩蓊的差別將會在範例中呈現。

霧的型態
第一種霧的型態,我們將實作線性的霧,這是最容易了解的霧型態。在我們呼叫 setWorldGeometry 我們要做的是設定是野的背景顏色。

我們可以重寫 createViewport function (就跟之前的教學一樣),伴我們不希望每次創造一個新的霧的時候就重新設定一次。我們所做得如下:

Ogre::ColourValue fadeColour(0.9, 0.9, 0.9);
mWindow->getViewport(0)->setBackgroundColour(fadeColour);


你可以用 getNumViewports member function 來得到 viewport 數量 與 經由改變她們,要是你有一個以上的viewport,但是這種情形很少發生。

我們可以直接得到 viewport。當我們設定好背景顏色,我們可以產生霧:

mSceneMgr->setFog(Ogre::FOG_LINEAR, fadeColour, 0.0, 50, 500);

第一個參數用來設定霧的型態,第二個参數是用來設定霧的顏色,第三個参數不是用來設定線性的霧,第四個跟第五個設定濃霧的範圍,在這個範例我們設定霧從50的地方開始到500的地方結束。在0到50單位中,攝影機是看不到霧的,從50到500單位,霧的濃度是以線性的方式增加。

在500單位的時候,霧的濃度讓你看不到其他東西,編譯與執行。

另外一個形態的霧,我們可以使用指數的霧,不用設定起始與結束的邊界,我們設定霧的密度,修改成:
mSceneMgr->setFog(Ogre::FOG_EXP, fadeColour, 0.005);

編譯與執行
創造一個不同的霧,這個指數型態的霧,還可以比第一個更明顯。
mSceneMgr->setFog(Ogre::FOG_EXP2, fadeColour, 0.003);

在一次編譯與執行,Ogre 提供霧在這三個中可以相互替換的功能,你應該體驗這三個功能。



Fog and Sky

您可能遇到一些有趣的問題時,嘗試使用霧與SkyBox和SkyDome。由於 SkyDomes和SkyBoxes只是立方體,使用起來是有問題的,因為有霧工程是以球的方式呈現。清除內容 createScene方法。如果我們巧妙地選擇我們的SkyDome霧參數,我們可以看到問題直接:

Ogre::ColourValue fadeColour(0.9, 0.9, 0.9);
mSceneMgr->setFog(Ogre::FOG_LINEAR, fadeColour, 0.0, 10, 1200);
mWindow->getViewport(0)->setBackgroundColour(fadeColour);
mSceneMgr->setSkyDome(true, "Examples/CloudySky", 5, 8, 500);


編譯和運行應用程序。如果你移動相機周圍,你會看到不同部分的SkyDome捅的霧根據什麼部分SkyDome你看著(注意藍色來通過在兩側,而不是在中間):

IMAGE_HERE

這當然不是我們想要的。另一種方法是使用SkyPlane代替。替換代碼 createScene與此:
Ogre::ColourValue fadeColour(0.9, 0.9, 0.9);
mSceneMgr->setFog(Ogre::FOG_LINEAR, fadeColour, 0.0, 10, 1200);
mWindow->getViewport(0)->setBackgroundColour(fadeColour);

Ogre::Plane plane;
plane.d = 100;
plane.normal = Ogre::Vector3::NEGATIVE_UNIT_Y;

mSceneMgr->setSkyPlane(true, plane, "Examples/CloudySky", 500, 20, true, 0.5, 150, 150);


將英文翻譯為中文(繁體)這看上去是正確的。如果我們仰望天空,我們可以看到天空(這是這種情況在現實生活中,如果霧正確呈現的話),但不是通過有趣的方式。

不管你是否使用曲率與否,這解決我們的問題的用戶能夠看到地平線其中SkyPlane看起來不正確。


還有一種方法,使霧完全不影響天空實體,但它需要修改腳本中天空的材質。

這已經超出了本教程的範圍,但對於將來參考這個參數是什麼物質所構成的霧。



Fog as Darkness
您可能不希望使用的天空都當你設置霧,因為霧如果夠厚你將看不到天空,很厚的霧如我們前面所提,允許我暪產生精巧的圖形,可以用在一些案例上。

不是將霧設成較量的顏色,讓我們將它設成很暗,看看會有什麼情形:

Ogre::ColourValue fadeColour(0.1, 0.1, 0.1);
mWindow->getViewport(0)->setBackgroundColour(fadeColour);
mSceneMgr->setFog(Ogre::FOG_LINEAR, fadeColour, 0.0, 10, 150);

Ogre::Plane plane;
plane.d = 10;
plane.normal = Ogre::Vector3::NEGATIVE_UNIT_Y;

mSceneMgr->setSkyPlane(true, plane, "Examples/SpaceSkyPlane", 100, 45, true, 0.5, 150, 150);


編譯和運行應用程序。這是我們得到:

IMAGE_HERE

不是太可怕了。當然,一旦你能,你應該使用適當的照明,而不是這個技巧,但它確實表明霧的靈活性,以及一些有趣的東西,你可以做的引擎。用黑色霧也可能是一種有趣的方式做一個“盲“或“黑暗“的法術效果,如果你正在編寫一個遊戲,使用第一人稱視角。

arrow
arrow
    全站熱搜

    hoshili770205 發表在 痞客邦 留言(0) 人氣()