这是使用盖莫游戏引擎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>
#include <GEngine/Gaimo.hpp>

 using namespace std;
using namespace std;
 using namespace core;
using namespace core; 

 int Main()
int Main()


 {
{
 //! 初始化引擎设备并得到设备指针
    //! 初始化引擎设备并得到设备指针
 RefPtr<Device> device = InitDevice("天空面测试");
    RefPtr<Device> device = InitDevice("天空面测试");
 //! 得到引擎场景指针
    //! 得到引擎场景指针
 RefPtr<SceneManager> scenemanager = device->GetSceneManager();
    RefPtr<SceneManager> scenemanager = device->GetSceneManager();
 //! 得到引擎资源指针
    //! 得到引擎资源指针
 RefPtr<ResourceManager> resourcemanager = device->GetResourceManager();
    RefPtr<ResourceManager> resourcemanager = device->GetResourceManager();
 //! 获取图形管理器指针
    //! 获取图形管理器指针
 RefPtr<ImageManager> imagemanager =  resourcemanager->GetImageManager();
    RefPtr<ImageManager> imagemanager =  resourcemanager->GetImageManager();
 //! 得到视频驱动器指针
    //! 得到视频驱动器指针
 RefPtr<VideoDriver> videodriver = device->GetVideoDriver();
    RefPtr<VideoDriver> videodriver = device->GetVideoDriver();

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

 //! 获取雾指针
    //! 获取雾指针
 RefPtr<Fog> fog = resourcemanager->GetFog("..\\script//fog.lua","fog");
    RefPtr<Fog> fog = resourcemanager->GetFog("..\\script//fog.lua","fog");
 fog->Render();
    fog->Render();
 BEGIN_LOOP(device)
    BEGIN_LOOP(device)
 videodriver->SetClearBuffer(ENGINE_CLEAR_COLOR | ENGINE_CLEAR_DEPTH);
       videodriver->SetClearBuffer(ENGINE_CLEAR_COLOR | ENGINE_CLEAR_DEPTH);
 camera->Render();
       camera->Render();
 sky->Render();
       sky->Render();
 END_LOOP(device)
    END_LOOP(device)
 return 0;
    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天真的是蔚蓝蔚蓝的