|
使用盖莫游戏引擎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了
下面是贴图:
|
|