| 
 | 
 
使用盖莫游戏引擎2.1.1的天空面 
这是使用盖莫游戏引擎2.1.1的天空面功能 
很简单的 
先说天空面描述符(引入这个的目的在于减少很多不相关的函数和代码) 
//////////////////////////////////////////////////////// 
/// 定义引擎天空面描述符 
//////////////////////////////////////////////////////// 
struct SkyPlaneDesc 
{    
    SkyPlaneDesc():divisions(32),   
                   pradius(1200.0f), 
                   aradius(1800.0f), 
                   rate(2.5f), 
                   axisx(0.0f), 
                   axisy(1.0f), 
                   axisz(0.0f) 
                   { 
                   } 
                  
    /////////////////////////////////////////////////////// 
    /// 检查描述符是否合法 
    /////////////////////////////////////////////////////// 
    bool IsValid()const 
    { 
        return image && 
               divisions > 1 && 
               pradius > 1.0f && 
               aradius > 1.0f; 
    } 
    
    //! 天空面的图形 
    RefPtr<Image> image; 
    int   divisions;   
    float pradius; 
    float aradius; 
    //! 天空转速(角度/秒) 
    float rate; 
    //! 天空旋转轴 
    float axisx; 
    float axisy; 
    float axisz;   
    
    COPY_OBJECT(SkyPlaneDesc) 
}; 
 
其中天空面参数有天空面分割数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; 
} 
代码并没有引入地形等其他不相关的东西 
只是简单的天空面渲染 
代码虽然很多但是核心无非就是: 
    //! 得到天空图形 
    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); 
 
在循环过程中无非就是她的Render了 
下面是贴图: 
 
  |   
 
 
 
 |