Ogre中级教程7翻译版(8)

2020-04-21 02:15

2、createFrameListener - 创造信息标签

3、destroyScene - 自我销毁

下面我们继续??

frameRenderingQueued

[cpp] view plaincopy // 帧渲染队列

bool BasicTutorial4::frameRenderingQueued(const Ogre::FrameEvent& evt) {

bool ret = BaseApplication::frameRenderingQueued(evt);

if (mTerrainGroup->isDerivedDataUpdateInProgress()) {

// 如果还是在生产地形,则给予提示

mTrayMgr->moveWidgetToTray(mInfoLabel, OgreBites::TL_TOP, 0); mInfoLabel->show(); if (mTerrainsImported) {

mInfoLabel->setCaption(\ }

else {

mInfoLabel->setCaption(\ } } else {

mTrayMgr->removeWidgetFromTray(mInfoLabel); mInfoLabel->hide(); if (mTerrainsImported) {

// 如果已经全部载入,则保存所有的地形,这样下次启动就不用重复载入了

mTerrainGroup->saveAllTerrains(true); mTerrainsImported = false; } }

return ret; }

createFrameListener

之所以要重载此函数,唯一的目的就是为了加入个信息标签以显示载入进度,代码如下:

[cpp] view plaincopy // 帧监听

void BasicTutorial4::createFrameListener(void) {

BaseApplication::createFrameListener();

// 创建一条信息栏显示进度

mInfoLabel = mTrayMgr->createLabel(OgreBites::TL_TOP, \}

destroyScene

代码如下:

[cpp] view plaincopy // 析构场景

void BasicTutorial4::destroyScene(void) {

OGRE_DELETE mTerrainGroup; OGRE_DELETE mTerrainGlobals; } 编译运行

编译运行你就可以看到载入的信息栏了。当信息栏消失后,地形信息将被保存起来,去目录OGRE_HOME/media看下,是否有*.dat的文件? 天空

OGRE提供了3种天空:天空盒、天空穹和天空面,下面逐一介绍。 天空盒

天空盒是个巨大的立方体,他将场景中的所有物件全部包含在里面。直接用代码来体验下,将下列一行加入到函数createScene中:

[cpp] view plaincopy // 设置天空盒

// 第一个参数指明是否开启天空盒

// 第二个参数是一个材质脚本,此脚本描述了天空盒的信息 // 第三个参数指明天空盒离相机的距离

// 第四个参数说明天空盒绘制的顺序:是在场景其他对象绘制之后还是之前 // 你应该自行修改代码以确定这些参数多代表的意义和表现 // mSceneMgr->setSkyBox(true, \

// mSceneMgr->setSkyBox(true, \// mSceneMgr->setSkyBox(true, \

mSceneMgr->setSkyBox(true, \

编译运行,不怎么像个天空是吧?因为我们使用的天空贴图比较挫:)。当你使用如下代码时:

[cpp] view plaincopy

mSceneMgr->setSkyBox(true, \

什么都没有变,是吧?这是因为第四个参数的默认值是true,也就是说天空盒会最先渲染,其它的东西会渲染到天空盒之上,从而使天空盒看起来像是在背后。(注意你不应该让第三个参数小于摄像机的近剪切面距离,否则他会不可见!)其实天空盒并不应该最先渲染,因为你会渲染他的全部。假如你最后渲染他,OGRE只会渲染可见的部分,从而提高一定的运行速度。 天空穹

天空穹和天空盒非常像,他也是通过一个巨大的立方体围绕着场景中所有的实体,但最大的不同是:贴图被用球体的方法投影到立方体上。你看到的其实还是一个立方体,只不过它的贴图看上去像贴到了一个球体上一样。这种天空有一个很大的缺陷,就是立方体的下面没有任何贴图,所有你必须要有一个类似地面的东西来遮盖下面。

OGRE的示例贴图将让你很明显地看到这个缺陷。删掉setSkyBox然后在createScene中添加下面代码:

[cpp] view plaincopy

mSceneMgr->setSkyDome(true, \

当你运行时,将镜头移动到地面的中间,然后是镜头几乎和地面平行。按R键切换到网格状态,你会发现你看到的仍然是一个立方体(没有底的),但是那些云彩看起来却像覆盖在球体上一样。(注意云彩的变换是在\脚本里定义的,并不是所有的天空穹都有这样的效果。)


Ogre中级教程7翻译版(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:溶剂罐区作业指导书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: