游戏开发论坛

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

盖莫游戏引擎2.1.1的镜头光功能小例一试

[复制链接]

56

主题

94

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2010-4-8 20:46:00 | 显示全部楼层 |阅读模式
盖莫游戏引擎2.1.1的镜头光功能小例一试
这是盖莫游戏引2.1.1的镜头光功能测试
可以看出盖莫游戏引擎随着开发的不断深入功能越来越强大了
首先上镜头光的代码
////////////////////////////////////////////////////////////
/// 定义引擎镜头光类
////////////////////////////////////////////////////////////
class LensFlare : public Renderable
{
public:
    ////////////////////////////////////////////////////////////
    /// 镜头光构造函数
    ////////////////////////////////////////////////////////////
    LensFlare(){}

    ////////////////////////////////////////////////////////////
    /// 镜头光析构函数
    ////////////////////////////////////////////////////////////
    virtual ~LensFlare(){}

    ////////////////////////////////////////////////////////////
    /// 设置镜头光位置
    ////////////////////////////////////////////////////////////
    virtual void SetLocation(float x,float y,float z) = 0;

    ////////////////////////////////////////////////////////////
    /// 设置主光节点颜色
    ////////////////////////////////////////////////////////////
    virtual void SetMainNodeColor(const Color &maincolor) = 0;

    ////////////////////////////////////////////////////////////
    /// 设置最后一个次光节点颜色
    ////////////////////////////////////////////////////////////
    virtual void SetLastSubNodeColor(const Color &lastcolor) = 0;

    ////////////////////////////////////////////////////////////
    /// 加入主光节点
    ////////////////////////////////////////////////////////////
    virtual bool AddMainNode(float size,RefPtr<Texture> texture) = 0;

    ////////////////////////////////////////////////////////////
    /// 加入次光节点
    ////////////////////////////////////////////////////////////
    virtual bool AddSubNode(float size,float pos,RefPtr<Texture> texture) = 0;

    ////////////////////////////////////////////////////////////
    /// 渲染函数
    ////////////////////////////////////////////////////////////
    virtual void Render() = 0;

    DECLARE_OBJECT(LensFlare)
};
可以看出镜头光继承于可渲染对象也就是说我们认为镜头光是一种可渲染对象
它可以被启用也可以使用Frustum做剔除处理
另外需要说明的就是我们可以设置主光和末尾次光的颜色值
其余次光的颜色将使用其颜色的插值

下面是具体的测试代码
移动摄像机则镜头光会随之改变方向
/*!==========================================================================
*
*  盖莫游戏引擎(GaiMo Game Engine)
*
*  版权所有 (C) 2009-2009 成都盖莫软件技术工作室 保留所有权利
*  Copyright (C) 成都盖莫软件技术工作室.  All Rights Reserved.
*
*  了解更多情况,请访问 http://www.gaimo.net
****************************************************************************/
//! 本例子主要测试盖莫游戏引擎的镜头光功能
//! 2010.04.08
#include <GEngine/Gaimo.hpp>
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<FileSystem> filesystem = device->GetFileSystem();
    //! 设置文件加载路径
    filesystem->AddToSearchPath("..\\image\\lenflare.zip");
    //! 获取主光文件
    RefPtr<core::ReadFile> mainlenfile = filesystem->OpenRead("hardglow.bmp");
    //! 获取次光文件
    RefPtr<core::ReadFile> sublenfile = filesystem->OpenRead("halo.bmp");
    //! 获取主光图形指针
    RefPtr<Image> mainlenimage = imagemanager->CreateObject("mainlenimage",mainlenfile);
    //! 获取次光图形指针
    RefPtr<Image> sublenimage = imagemanager->CreateObject("sublenimage",sublenfile);
   
    //! 获取纹理管理器
    RefPtr<TextureManager> texturemanager = resourcemanager->GetTextureManager();
    //! 获取主光纹理
    RefPtr<Texture> maintexture =  texturemanager->CreateTexture("maintexture",mainlenimage);
    //! 获取次光纹理
    RefPtr<Texture> subtexture =  texturemanager->CreateTexture("subtexture",sublenimage);
   
    //! 获取摄像机指针
    RefPtr<Camera> camera = scenemanager->GetCameraManager()->CreateCamera("camera",
                                                                           Vector3f(),
                                                                           Vector3f(100,0,0));
    camera->SetViewPort(Recti(0,0,640,480));
    camera->SetPerspective(45.0f,640.0f/480.0f,0.1f,600.0f);
    camera->Render();
   
    //! 获取和设置镜头光参数
    RefPtr<LensFlare> lenflare = scenemanager->GetLenFlare();
    //! 设置主光位置
    lenflare->SetLocation(100,0,0);
    //! 设置主光颜色
    lenflare->SetMainNodeColor(core::Color(1.0,0.8,0.0,0.3));
    //! 设置主光大小和纹理
    lenflare->AddMainNode(64,maintexture);
    //! 加载次光大小,位置和纹理
    for(int i = 0; i < 12; i++)
       lenflare->AddSubNode(18*(i%2+1),(i+1)/10.0f,subtexture);
    lenflare->SetLastSubNodeColor(core::Color(0.0,0.8,0.5));     

    BEGIN_LOOP(device)
       videodriver->SetClearBuffer(ENGINE_CLEAR_COLOR | ENGINE_CLEAR_DEPTH);
       camera->SetPerspective(45.0f,640.0f/480.0f,0.1f,600.0f);
       camera->Render();
       lenflare->Render();
    END_LOOP(device)
    return 1;
}


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

本版积分规则

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

GMT+8, 2024-5-13 07:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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