游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1922|回复: 0

使用盖莫游戏引擎2.1.1的天空面

[复制链接]

56

主题

94

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2010-4-8 17:23:00 | 显示全部楼层 |阅读模式
使用盖莫游戏引擎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了
下面是贴图:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-5-13 15:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表