Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿

这是使用盖莫游戏引擎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天真的是蔚蓝蔚蓝的
posted on 2010-04-08 17:19 ccsdu2009 阅读(945) 评论(0)  编辑 收藏 引用 所属分类: Game引擎

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理