ogre小知识

来源:互联网 发布:散打训练软件 编辑:程序博客网 时间:2024/05/22 04:46

ogre小知识

 

1.Ogre中的随机函数

例如:Real posX = Math::RangeRandom(0.0, 0.7);

      Real posY = Math::RangeRandom(0.1, 0.7);

RangeRandom1个参数是最小底线值,第2个参数是最高限值;也即是:in [fLow,fHigh]

 

 

 

2.字符串与数据类型之间转换

 

例如:①. 数据类型转换成字符串Ogre::StringConverter::toString(AddCount)

      . 字符串转换成数据类型int z = StringConverter::parseReal(TempValue);

 

 

3.对于在监听器创建的资源,销毁创建的plane资源

在附加依赖项中增加strmiids.lib         strmbasd.lib

MeshManager::getSingleton().remove( "FloorPlane" );
                     //
节点和实体分离
                     mtyremarkNode->detachObject(ent_tyremark);
                     //
销毁实体
                     mSceneMgr->destroyEntity(ent_tyremark->getName());
                     //
销毁创建的面的结点
                     pNode_che->removeAndDestroyChild("tyremark");

 

 

 

4.Ogre中添加视频

#include "UtilsOgreDshow.h"

// 视频播放所需要的变量
OgreUtils::DirectShowMovieTexture* dshowMovieTextureSystem;
Ogre::String movieName = "c:/ss.avi";

Ogre::MaterialPtr VideoMat;
Ogre::TextureUnitState* VideoTex;

Ogre::Overlay* mVideoOverlay;

 

 

void InitVideo()
{
   dshowMovieTextureSystem = new OgreUtils::DirectShowMovieTexture(768,576);
   dshowMovieTextureSystem->loadMovie(movieName);
   VideoMat = Ogre::MaterialManager::getSingletonPtr()->create("MovieMaterial",Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
   VideoTex = VideoMat->getTechnique(0)->getPass(0)->createTextureUnitState();
   VideoTex ->setTextureName(dshowMovieTextureSystem->getMovieTexture()->getName() );
   VideoMat->load();


   // ResourceGroupManager::getSingleton().initialiseResourceGroup("Intro");

   OverlayManager& VideooverlayMgr = OverlayManager::getSingleton();

   //// Create a panel
   Ogre::OverlayManager* VideoOM = Ogre::OverlayManager::getSingletonPtr();
   Ogre::OverlayContainer* Videopanel = static_cast<OverlayContainer*>(VideooverlayMgr.createOverlayElement("Panel", "PanelName"));
   // Create Panel, Overlay, and Show the Overlay

   Videopanel->setMetricsMode(Ogre::GMM_RELATIVE);
   Videopanel->setPosition(0, 0);
   Videopanel->setDimensions(1, 1);
   Videopanel->setColour(Ogre::ColourValue(1.0,1.0,1.0,1.0));

   Videopanel->setMaterialName(VideoMat->getName());
   mVideoOverlay = VideoOM->create("OverlayName");


   mVideoOverlay->add2D(Videopanel);
   mVideoOverlay->setZOrder(600);

   mVideoOverlay->show();
   dshowMovieTextureSystem->playMovie();

}

别忘了在framelistener中的构造函数中调用 InitViedo()函数
接着在framelistener中,刷新每 一帧:

dshowMovieTextureSystem->updateMovieTexture();

   if (IdleStatus == true)
   {
    if (dshowMovieTextureSystem->isPlayingMovie() == false)
    {
     dshowMovieTextureSystem->rewindMovie();
     mVideoOverlay->show();
     dshowMovieTextureSystem->playMovie();
    }
   }

最后,在程序退出时要释放掉资源

if(this->mKeyboard->isKeyDown(OIS::KC_ESCAPE))
   {
    VideoTex ->setTextureName("");
    VideoMat->unload();
    if (dshowMovieTextureSystem!=NULL)
    {
     delete dshowMovieTextureSystem;
     dshowMovieTextureSystem = NULL;
    }
    return false;
   }

PS:基于Direct9x.

UtilsOgreDshow.h   UtilsOgreDshow_private.h      UtilsOgreDshow.cpp

 

 

5.如何不让OGRE程序的配置对话框也显示

Application中继承configure()函数,在判断条件中加 mRoot->restoreConfig()

如下:

bool configure(void)
       {
                if( mRoot->restoreConfig() || mRoot->showConfigDialog())
                {
                        mWindow = mRoot->initialise(true);
                        return true;
               }
              else
               {
                        return false;
              }
       }

 

 

6.如何去除OGRE中的帧数界面和OGRE标志

在创建帧监听时调用       this->mFrameListener->showDebugOverlay(false);

 

原创粉丝点击