Liny_@NotePad

沉迷ACG中

OGRE中使用overlay脚本。。

比较简单。。笔记下,这里使用了ogreCore的LoadingOverlay,暂时只用了这些内容 - -

  • 获得Overlay*:Overlay* pOverlay = OverlayManager::getSingleton().getByName("Core/LoadOverlay");
  • 显示Overlay*:pOverlay->show();
  • 隐藏Overlay*:pOverlay->hide();
  • 获得Overlay中名为"Core/LoadPanel/Bar/Progress"的元素:OverlayElement* pElement = OverlayManager::getSingleton().getOverlayElement("Core/LoadPanel/Bar/Progress");
  • 更新元素某属性的值:pElement->setWidth(30); // 如宽度
    注意有些属性OverlayElement都有,有些要强制转换为脚本中的类型才能设定。
  • 更新元素显示:pElement->_update();

OGRE中使用粒子系统

由于环境出了问题,CEGUI无法正常 囧 于是我改封装粒子。。

找到一个不错的编辑器:http://www.game-cat.com/ogre/pe/ParticleEditor_Beta.zip

但是要注意这个编辑器生成的particle文件,各个ParticleSystem前面要加上particle_system,否则1.6的OGRE无法读取(1.4的OGRE支持)。
如:particle_system Examples/Smoke

将粒子脚本和粒子用到的纹理都放到resources.cfg指定过的目录下

使用语句:

  1. ParticleSystem* particle= mSceneMgr->createParticleSystem("test", "Examples/smoke");
  2. mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(particle);

即可添加一个粒子系统。

这里createParticleSystem的第一个参数是粒子系统名(相当于map-key吧,以后可以通过该值从SceneManager的getParticleSystem方法读取已创建的粒子系统);
第二个参数则是粒子系统在.particle文件中定义的名字。OGRE会搜索所有资源目录中的.particle去找是否有该资源。

在OGRE中使用Terragen生成的高度图。。

首先在Terragen的Landscape窗口,生成一个地形(Generate Terrain),完成后单击Export,导出成Raw 16 bits Intel Byte-Order(好像8bit也可以,没有试过)。

之后将OGRE SDK的media目录下的terrain.cfg文件复制一份,改成你想要的名字,修改里面的以下参数:

  • WorldTexture=terrain_texture.jpg
    这是纹理的贴图图片
     
  • DetailTexture=terrain_detail.jpg
    纹理的精细文件
     
  • DetailTile=3
    精细等级
     
  • Heightmap.image=terrain.png
    高度图源文件,可以是灰度图image,也可以是raw。
     
  • Heightmap.raw.size=513
    这本来是放在注释里面的,如果使用raw,则将这个size设成你地形的size。
     
  • Heightmap.raw.bpp=2
    这也是注释的内容。。如果用raw,则根据bits数,如果你生成8bits的,则bpp=1,16bits则为2。
     
  • PageSize=513
    建议和raw的size一样 - -。

改好后保存,将你需要的纹理文件和raw文件都放入media\materials\textures文件夹下。下面在OGRE中加载:

创建Terrain场景管理器

  1. mSceneMgr = mRoot->createSceneManager("TerrainSceneManager");

加载场景

  1.                 std::string terrain_cfg("test.cfg");
  2.                 mSceneMgr -> setWorldGeometry( terrain_cfg );

完成 - -。。。