這是蓋莫游戲引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;
}
代碼很多 但是也很容易理解不需要做什么解釋
下面是對應的貼圖