這是使用蓋莫游戲引擎2.1.1的天空面功能
很簡單的
先說天空面描述符(引入這個的目的在于減少很多不相關的函數和代碼)
1 ////////////////////////////////////////////////////////
2 /// 定義引擎天空面描述符
3 ////////////////////////////////////////////////////////
4 struct SkyPlaneDesc
5 {
6 SkyPlaneDesc():divisions(32),
7 pradius(1200.0f),
8 aradius(1800.0f),
9 rate(2.5f),
10 axisx(0.0f),
11 axisy(1.0f),
12 axisz(0.0f)
13 {
14 }
15
16 ///////////////////////////////////////////////////////
17 /// 檢查描述符是否合法
18 ///////////////////////////////////////////////////////
19 bool IsValid()const
20 {
21 return image &&
22 divisions > 1 &&
23 pradius > 1.0f &&
24 aradius > 1.0f;
25 }
26
27 //! 天空面的圖形
28 RefPtr<Image> image;
29 int divisions;
30 float pradius;
31 float aradius;
32 //! 天空轉速(角度/秒)
33 float rate;
34 //! 天空旋轉軸
35 float axisx;
36 float axisy;
37 float axisz;
38
39 COPY_OBJECT(SkyPlaneDesc)
40 };
其中天空面參數有天空面分割數division
2個半徑(面半徑和空間半徑)
一個天空圖形
4個關于旋轉的參數
下面是使用蓋莫游戲引擎天空面的例子如下所示:
#include <GEngine/Gaimo.hpp>

using namespace std;
using namespace core;

int Main()


{
//! 初始化引擎設備并得到設備指針
RefPtr<Device> device = InitDevice("天空面測試");
//! 得到引擎場景指針
RefPtr<SceneManager> scenemanager = device->GetSceneManager();
//! 得到引擎資源指針
RefPtr<ResourceManager> resourcemanager = device->GetResourceManager();
//! 獲取圖形管理器指針
RefPtr<ImageManager> imagemanager = resourcemanager->GetImageManager();
//! 得到視頻驅動器指針
RefPtr<VideoDriver> videodriver = device->GetVideoDriver();

//! 得到天空圖形
RefPtr<core::Image> image = imagemanager->CreateObject("sky","..\\image\\sky\\top.jpg");
//! 得到天空盒指針
SkyPlaneDesc desc;
desc.image = image;
desc.divisions = 32;
desc.pradius = 1200.0f;
desc.aradius = 1800.0f;
RefPtr<Renderable> sky = scenemanager->CreateSkyPlane(desc);
//! 獲取攝像機指針
RefPtr<Camera> camera = scenemanager->GetCameraManager()->CreateCamera("camera",
Vector3f(),
Vector3f(100,13,0));
camera->SetViewPort(Recti(0,0,640,480));
camera->SetPerspective(45.0f,640.0f/480.0f,0.1f,600.0f);

//! 獲取霧指針
RefPtr<Fog> fog = resourcemanager->GetFog("..\\script//fog.lua","fog");
fog->Render();
BEGIN_LOOP(device)
videodriver->SetClearBuffer(ENGINE_CLEAR_COLOR | ENGINE_CLEAR_DEPTH);
camera->Render();
sky->Render();
END_LOOP(device)
return 0;
}
代碼并沒有引入地形等其他不相關的東西
只是簡單的天空面渲染
代碼雖然很多但是核心無非就是:
1 //! 得到天空盒指針
2 SkyPlaneDesc desc;
3 desc.image = image;
4 desc.divisions = 32;
5 desc.pradius = 1200.0f;
6 desc.aradius = 1800.0f;
7 RefPtr<Renderable> sky = scenemanager->CreateSkyPlane(desc);
8
9 //! 獲取攝像機指針
10 RefPtr<Camera> camera = scenemanager->GetCameraManager()->CreateCamera("camera",
11 Vector3f(),
12 Vector3f(100,13,0));
在循環過程中無非就是她的Render了
下面是貼圖:

t天真的是蔚藍蔚藍的