本文整理汇总了C++中ogre::Timer::getMilliseconds方法的典型用法代码示例。如果您正苦于以下问题:C++ Timer::getMilliseconds方法的具体用法?C++ Timer::getMilliseconds怎么用?C++ Timer::getMilliseconds使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ogre::Timer
的用法示例。
在下文中一共展示了Timer::getMilliseconds方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: notifyMaterialRender
//---------------------------------------------------------------------------
void HeatVisionListener::notifyMaterialRender(Ogre::uint32 pass_id, Ogre::MaterialPtr &mat)
{
if(pass_id == 0xDEADBABE)
{
// "random_fractions" parameter
fpParams->setNamedConstant("random_fractions", Ogre::Vector4(Ogre::Math::RangeRandom(0.0, 1.0), Ogre::Math::RangeRandom(0, 1.0), 0, 0));
// "depth_modulator" parameter
float inc = ((float)timer->getMilliseconds())/1000.0f;
if ( (fabs(curr-end) <= 0.001) )
{
// take a new value to reach
end = Ogre::Math::RangeRandom(0.95, 1.0);
start = curr;
}
else
{
if (curr > end) curr -= inc;
else curr += inc;
}
timer->reset();
fpParams->setNamedConstant("depth_modulator", Ogre::Vector4(curr, 0, 0, 0));
}
}
示例2: if
void OMW::Engine::go()
{
assert (!mContentFiles.empty());
assert (!mOgre);
Settings::Manager settings;
std::string settingspath;
settingspath = loadSettings (settings);
// Create encoder
ToUTF8::Utf8Encoder encoder (mEncoding);
mEncoder = &encoder;
prepareEngine (settings);
// Play some good 'ol tunes
MWBase::Environment::get().getSoundManager()->playPlaylist(std::string("Explore"));
if (!mSaveGameFile.empty())
{
MWBase::Environment::get().getStateManager()->loadGame(mSaveGameFile);
}
else if (!mSkipMenu)
{
// start in main menu
MWBase::Environment::get().getWindowManager()->pushGuiMode (MWGui::GM_MainMenu);
try
{
// Is there an ini setting for this filename or something?
MWBase::Environment::get().getSoundManager()->streamMusic("Special/morrowind title.mp3");
std::string logo = mFallbackMap["Movies_Morrowind_Logo"];
if (!logo.empty())
MWBase::Environment::get().getWindowManager()->playVideo(logo, true);
}
catch (...) {}
}
else
{
MWBase::Environment::get().getStateManager()->newGame (!mNewGame);
}
// Start the main rendering loop
Ogre::Timer timer;
while (!MWBase::Environment::get().getStateManager()->hasQuitRequest())
{
float dt = timer.getMilliseconds()/1000.f;
dt = std::min(dt, 0.2f);
timer.reset();
Ogre::Root::getSingleton().renderOneFrame(dt);
}
// Save user settings
settings.saveUser(settingspath);
std::cout << "Quitting peacefully." << std::endl;
}
示例3: Run
::FreeConsole();
}
void Game::Run()
{
InitializeGame();
ConnectToPVD();
InitializeKinect();
kinectController = BodyController();
InputManager* inputManager = InputManager::GetInstance();
inputManager->RegisterSensorListener(&kinectController);
inputManager->BeginAllCapture();
sceneManager = new SceneManager();
sceneManager->Initialize(mWindow, mRoot);
AllocConsole();
freopen("conin$","r",stdin);
freopen("conout$","w",stdout);
freopen("conout$","w",stderr);
printf("Debugging Window:\n");
/*std::shared_ptr<GameScene> gameScene(new GameScene(sceneManager, mRoot, "Probending Arena", contestantData));
sceneManager->FlagSceneSwitch(gameScene, true);
gameScene.reset();*/
std::shared_ptr<MenusScene> menuScene = std::make_shared<MenusScene>(sceneManager, mRoot, MenusScene::Screens::MainMenu);
sceneManager->FlagSceneSwitch(menuScene, true);
menuScene.reset();
bool rendering = true;
Ogre::Timer gameTimer = Ogre::Timer();
float currentTime = 0;
float previousTime = 0;
while (rendering)
{
gameTimer.reset();
if(!Update(currentTime / 1000.0f))
rendering = false;
//Ogre::WindowEventUtilities::messagePump();
#if(!MEMORY_LEAK_DETECT)
mRoot->renderOneFrame();
#endif
currentTime = (float)gameTimer.getMilliseconds();
示例4: frameRenderingQueued
// FrameListener callback (~ idleFunc). Perform animation here
bool frameRenderingQueued(const Ogre::FrameEvent& evt) {
float t = mTimer.getMilliseconds()*0.001;
// Do some simple animations by changing scene node transform parameters
Ogre::SceneNode* triangle = mScene->getSceneNode("Triangle");
triangle->resetToInitialState();
triangle->rotate(Ogre::Vector3(0, 0, 1), Ogre::Radian(t));
// Exercise 1: Use SceneNode to manipulate the object and create animation
// ...
return true; // Return false to quit
}
示例5: initOgreRoot
bool initOgreRoot(){
try{
// Create logs that funnel to android logs
Ogre::LogManager *lm = OGRE_NEW Ogre::LogManager();
Ogre::Log *l = lm->createLog("AndroidLog", true, true, true);
g_ll = OGRE_NEW AndroidLogListener();
l->addListener(g_ll);
// Create a root object
g_root = OGRE_NEW Ogre::Root("", "", "");
// Register the ES2 plugin
g_gles2Plugin = OGRE_NEW Ogre::GLES2Plugin();
Ogre::Root::getSingleton().installPlugin(g_gles2Plugin);
// Register particle plugin
g_pfxPlugin = OGRE_NEW Ogre::ParticleFXPlugin();
Ogre::Root::getSingleton().installPlugin(g_pfxPlugin);
// Grab the available render systems
const Ogre::RenderSystemList &renderSystemList = g_root->getAvailableRenderers();
if(renderSystemList.empty())
{
return false;
}
// Set the render system and init
Ogre::RenderSystem *system = renderSystemList.front();
g_root->setRenderSystem(system);
g_root->initialise(false);
g_lastTime = g_timer.getMilliseconds();
return true;
}catch(Ogre::Exception &e){
}
return false;
}
示例6: InitGui
//.........这里部分代码省略.........
/// Veget --------
lp = app->mWndPick->createWidget<MultiList2>("MultiListBox",8,8,400,800, Align::Left | Align::VStretch);
liVeg = lp; lp->eventListChangePosition += newDelegate(this, &CGui::listPickVeg);
lp->setColour(Colour(0.7,0.9,0.9)); lp->setInheritsAlpha(false);
lp->removeAllColumns(); lp->removeAllItems();
lp->addColumn("#90C0F0", 25);
lp->addColumn("#E0FFE0"+TR("#{Model}"), 157);
lp->addColumn("#80E0E0"+TR("#{MaxScale}"), 40);
lp->addColumn("#80E080/"/*+TR("#{AngleMax}")*/, 30);
lp->addColumn(" ", 20);
liPickW[2] = 280;
for (i=0; i < data->pre->veg.size(); ++i)
{ const PVeget& t = data->pre->veg[i];
String c = gcom->scnClr[gcom->scnN[t.sc]]; if (c.empty()) c = "#000000";
lp->addItem(c+ t.sc, 0); l = lp->getItemCount()-1;
lp->setSubItemNameAt(1,l, c+ t.name);
//lp->setSubItemNameAt(2,l, c+ fToStr( t.minScale, 1,3));
lp->setSubItemNameAt(2,l, c+ fToStr( t.maxScale, 1,3));
lp->setSubItemNameAt(3,l, c+ fToStr( t.maxTerAng, 0,2));
}
/// Road --------
lp = app->mWndPick->createWidget<MultiList2>("MultiListBox",8,8,400,800, Align::Left | Align::VStretch);
liRd = lp; lp->eventListChangePosition += newDelegate(this, &CGui::listPickRd);
lp->setColour(Colour(0.9,0.8,0.7)); lp->setInheritsAlpha(false);
lp->removeAllColumns(); lp->removeAllItems();
lp->addColumn("#90C0F0", 25);
lp->addColumn("#FFE0D0"+TR("#{GrMaterial}"), 157);
lp->addColumn("#80E0E0"+TR("#{Surface}"), 80);
lp->addColumn(" ", 20);
liPickW[3] = 280;
lp->addItem("#102030J", 0); lp->setSubItemNameAt(1,0, "#102030"); // ""
for (i=0; i < data->pre->rd.size(); ++i)
{ const PRoad& t = data->pre->rd[i];
String c = gcom->scnClr[gcom->scnN[t.sc]]; if (c.empty()) c = "#000000";
lp->addItem(c+ t.sc, 0); l = lp->getItemCount()-1;
lp->setSubItemNameAt(1,l, c+ t.mtr);
String su = t.surfName; if (su.substr(0,4)=="road") su = su.substr(4, su.length());
lp->setSubItemNameAt(2,l, c+ su);
}
// todo: sort,filter pick lists..
//lp->mSortColumnIndex = pSet->tracks_sort;
//lp->mSortUp = pSet->tracks_sortup;
//TrackListUpd(true); //upd
//listTrackChng(trkList,0);
/// [Track]
//------------------------------------------------------------------------
gcom->sListTrack = pSet->gui.track; //! set last
gcom->bListTrackU = pSet->gui.track_user;
sCopyTrack = ""; //! none
bCopyTrackU = 0;
// text desc
Edt(gcom->trkDesc[0], "TrackDesc", editTrkDesc);
trkName = fEd("TrackName");
if (trkName) trkName->setCaption(pSet->gui.track);
gcom->GuiInitTrack();
// btn new, rename, delete
Btn("TrackNew", btnTrackNew);
Btn("TrackRename", btnTrackRename);
Btn("TrackDelete", btnTrackDel);
// load = new game
for (int i=1; i<=2; ++i)
{ Btn("NewGame"+toStr(i), btnNewGame); }
CreateGUITweakMtr();
/// 3d view [] (veget models, objects)
//--------------------------------------------
//rndCanvas = mGUI->findWidget<Canvas>("CanVeget"); //?
viewCanvas = app->mWndEdit->createWidget<Canvas>("Canvas", GetViewSize(), Align::Stretch);
viewCanvas->setInheritsAlpha(false);
viewCanvas->setPointer("hand");
viewCanvas->setVisible(false);
viewBox->setCanvas(viewCanvas);
viewBox->setBackgroundColour(Colour(0.32,0.35,0.37,0.7));
viewBox->setAutoRotation(true);
viewBox->setMouseRotation(true);
bGI = true; // gui inited, gui events can now save vals
LogO(String("::: Time Init Gui: ") + fToStr(ti.getMilliseconds(),0,3) + " ms");
}
示例7: update
MainMachineEvent SponsorsState::update(MainMachineInfo &info)
{
Ogre::Timer timer;
float timeStamp = 0;
MainMachineEvent result = MME_DONE;
Ogre::Real frameTime = 0;
float press = false;
// check we have loaded both overlays
ASSERT(mFader);
ASSERT(mOverlay);
// here is the main loop
bool running = true;
mAccumTime = mFaderTime;
mFader->show();
mOverlay->show();
while(running) {
timeStamp = timer.getMilliseconds();
GLOBAL_KEYBOARD->capture();
if(GLOBAL_KEYBOARD->isKeyDown(OIS::KC_ESCAPE)){
break;
}
// depending on the state we call the function
switch(mState){
case STATE_FADE_IN:
if(enterFade(frameTime)){
mState = STATE_SPONSORS;
mAccumTime = 0;
mFader->hide();
}
break;
case STATE_SPONSORS:
if(showSponsors(frameTime)){
mState = STATE_FADE_OUT;
mAccumTime = 0;
mFader->show();
}
break;
case STATE_FADE_OUT:
if(exitFade(frameTime)){
mState = STATE_END;
}
break;
case STATE_END:
running = false;
break;
default:
ASSERT(false);
}
// render the frame
if(!GLOBAL_ROOT->renderOneFrame()){
result = MME_DONE; //TODO: poner un erro real aca
break;
}
// This must be called when we use the renderOneFrame approach
Ogre::WindowEventUtilities::messagePump();
frameTime = (timer.getMilliseconds() - timeStamp) * 0.001;
}
return result;
}
示例8: createScene
// Create Scene
//-------------------------------------------------------------------------------------
void App::createScene() // once, init
{
// prv tex
int k=1024;
prvView.Create(k,k,"PrvView");
prvRoad.Create(k,k,"PrvRoad");
prvTer.Create(k,k,"PrvTer");
scn->roadDens.Create(k+1,k+1,"RoadDens");
/// ter lay tex
for (int i=0; i < 6; ++i)
{ String si = toStr(i);
scn->texLayD[i].SetName("layD"+si);
scn->texLayN[i].SetName("layN"+si);
}
// camera
asp = float(mWindow->getWidth())/float(mWindow->getHeight());
mCamera->setFarClipDistance(pSet->view_distance*1.1f);
mCamera->setNearClipDistance(0.1f);
// cam pos from last set
mCamera->setPosition(Vector3(pSet->cam_x,pSet->cam_y,pSet->cam_z));
mCamera->setDirection(Vector3(pSet->cam_dx,pSet->cam_dy,pSet->cam_dz).normalisedCopy());
mViewport->setVisibilityMask(RV_MaskAll); // hide prv cam rect
// tex fil
MaterialManager::getSingleton().setDefaultTextureFiltering(TFO_ANISOTROPIC);
MaterialManager::getSingleton().setDefaultAnisotropy(pSet->anisotropy);
Ogre::Timer ti;
// data load xml
scn->data->Load();
scn->sc->pFluidsXml = scn->data->fluids;
scn->sc->pReverbsXml = scn->data->reverbs;
// surfaces.cfg
LoadAllSurfaces();
LogO(String("::: Time load xmls: ") + fToStr(ti.getMilliseconds(),0,3) + " ms");
postInit(); // material factory
// gui * * *
if (pSet->startInMain)
pSet->isMain = true;
bGuiFocus = false/*true*/; bMoveCam = true; //*--
gui->InitGui();
///__ All #if 0 in Release !!!
/// _Tool_ scene ...................
#if 0
gui->ToolSceneXml();
exit(0);
#endif
/// _Tool_ warnings ................
/// takes some time
#if 0
gui->ToolTracksWarnings();
exit(0);
#endif
TerCircleInit();
createBrushPrv();
/// _Tool_ brushes prv .............
#if 0
gui->ToolBrushesPrv();
#endif
// load
if (pSet->autostart)
LoadTrack();
if (!pSet->autostart)
{ bGuiFocus = true; UpdVisGui(); }
iObjTNew = 0;
//SetObjNewType(0); //?white
gui->chkInputBar(0); // upd vis
gui->chkCamPos(0);
gui->chkFps(0);
}
示例9: LoadTrackEv
void App::LoadTrackEv()
{
Ogre::Timer ti;
NewCommon(false); // full destroy
iObjCur = -1;
scn->DestroyRoad();
scn->DestroyPace();
// load scene
scn->sc->LoadXml(gcom->TrkDir()+"scene.xml");
scn->sc->vdr = IsVdrTrack();
if (scn->sc->vdr) scn->sc->ter = false;
// water RTT recreate
scn->UpdateWaterRTT(mCamera);
BltWorldInit();
UpdWndTitle();
scn->CreateFluids();
scn->CreateWeather();
// set sky tex name for water
sh::MaterialInstance* m = mFactory->getMaterialInstance(scn->sc->skyMtr);
std::string skyTex = sh::retrieveValue<sh::StringValue>(m->getProperty("texture"), 0).get();
sh::Factory::getInstance().setTextureAlias("SkyReflection", skyTex);
sh::Factory::getInstance().setTextureAlias("CubeReflection", "ReflectionCube");
bNewHmap = false;/**/
scn->CreateTerrain(bNewHmap, scn->sc->ter);
if (track)
if (scn->sc->vdr) // vdrift track
{
if (!LoadTrackVdr(pSet->gui.track))
LogO("Error during track loading: " + pSet->gui.track);
CreateVdrTrack(pSet->gui.track, track);
CreateVdrTrackBlt();
}
// road ~
scn->road = new SplineRoad(this);
scn->road->Setup("sphere.mesh", pSet->road_sphr, scn->terrain, mSceneMgr, mCamera);
scn->road->LoadFile(gcom->TrkDir()+"road.xml");
scn->UpdPSSMMaterials();
// pace ~ ~
scn->pace = new PaceNotes(pSet);
scn->pace->Setup(mSceneMgr, mCamera, scn->terrain, gui->mGui, mWindow);
/// HW_Inst Test * * *
//inst = new Instanced();
//inst->Create(mSceneMgr,"sphere_inst.mesh");
CreateObjects();
if (pSet->bTrees && scn->sc->ter)
scn->CreateTrees(); // trees after objects so they aren't inside them
// updates after load
//--------------------------
gcom->ReadTrkStats();
gui->SetGuiFromXmls(); ///
Rnd2TexSetup();
//UpdVisGui();
//UpdStartPos();
UpdEditWnds(); //
try {
TexturePtr tex = TextureManager::getSingleton().getByName("waterDepth.png");
if (!tex.isNull())
tex->reload();
} catch(...) { }
gui->Status("#{Loaded}", 0.5,0.7,1.0);
if (pSet->check_load)
gui->WarningsCheck(scn->sc, scn->road);
LogO(String("::: Time Load Track: ") + fToStr(ti.getMilliseconds(),0,3) + " ms");
}
示例10: processInput
void World::processInput()
{
using namespace OIS;
static Ogre::Timer timer;
static unsigned long lastTime = 0;
unsigned long currentTime = timer.getMilliseconds();
//Calculate the amount of time passed since the last frame
Real timeScale = (currentTime - lastTime) * 0.001f;
if (timeScale < 0.001f)
timeScale = 0.001f;
lastTime = currentTime;
//Get the current state of the keyboard and mouse
keyboard->capture();
mouse->capture();
const OIS::MouseState &ms = mouse->getMouseState();
//[NOTE] When the left mouse button is pressed, add trees
if (ms.buttonDown(MB_Left)){
//Choose a random tree rotation
Degree yaw = Degree(Math::RangeRandom(0, 360));
//Choose a random scale
Real scale = Math::RangeRandom(0.5f, 0.6f);
//Calculate a position
Ogre::Vector3 centerPos = camera->getPosition() + (camera->getOrientation() * Ogre::Vector3(0, 0, -50));
Radian rndAng = Radian(Math::RangeRandom(0, Math::TWO_PI));
Real rndLen = Math::RangeRandom(0, 20);
centerPos.x += Math::Sin(rndAng) * rndLen;
centerPos.z += Math::Cos(rndAng) * rndLen;
//And add the tree
treeLoader->addTree(myTree, centerPos, yaw, scale);
//[NOTE] Dynamic trees are very easy, as you can see. No additional setup is required for
//the dynamic addition / removal of trees to work. Simply call addTree(), etc. as needed.
}
//[NOTE] When the right mouse button is pressed, delete trees
if (ms.buttonDown(MB_Right)){
//Calculate a position in front of the camera
Ogre::Vector3 centerPos = camera->getPosition() + (camera->getOrientation() * Ogre::Vector3(0, 0, -50));
//Delete trees within 20 units radius of the center position
treeLoader->deleteTrees(centerPos, 20);
//[NOTE] Dynamic trees are very easy, as you can see. No additional setup is required for
//the dynamic addition / removal of trees to work. Simply call deleteTrees(), etc. as needed.
}
//Always exit if ESC is pressed
if (keyboard->isKeyDown(KC_ESCAPE))
running = false;
//Reload the scene if R is pressed
static bool reloadedLast = false;
if (keyboard->isKeyDown(KC_R) && !reloadedLast){
unload();
load();
reloadedLast = true;
}
else {
reloadedLast = false;
}
//Update camera rotation based on the mouse
camYaw += Radian(-ms.X.rel / 200.0f);
camPitch += Radian(-ms.Y.rel / 200.0f);
camera->setOrientation(Quaternion::IDENTITY);
camera->pitch(camPitch);
camera->yaw(camYaw);
//Allow the camera to move around with the arrow/WASD keys
Ogre::Vector3 trans(0, 0, 0);
if (keyboard->isKeyDown(KC_UP) || keyboard->isKeyDown(KC_W))
trans.z = -1;
if (keyboard->isKeyDown(KC_DOWN) || keyboard->isKeyDown(KC_S))
trans.z = 1;
if (keyboard->isKeyDown(KC_RIGHT) || keyboard->isKeyDown(KC_D))
trans.x = 1;
if (keyboard->isKeyDown(KC_LEFT) || keyboard->isKeyDown(KC_A))
trans.x = -1;
if (keyboard->isKeyDown(KC_PGUP) || keyboard->isKeyDown(KC_E))
trans.y = 1;
if (keyboard->isKeyDown(KC_PGDOWN) || keyboard->isKeyDown(KC_Q))
trans.y = -1;
//Shift = speed boost
if (keyboard->isKeyDown(KC_LSHIFT) || keyboard->isKeyDown(KC_RSHIFT))
trans *= 2;
trans *= 100;
camera->moveRelative(trans * timeScale);
//Make sure the camera doesn't go under the terrain
Ogre::Vector3 camPos = camera->getPosition();
float terrY = HeightFunction::getTerrainHeight(camPos.x, camPos.z);
if (camPos.y < terrY + 5 || keyboard->isKeyDown(KC_SPACE)){ //Space = walk
camPos.y = terrY + 5;
camera->setPosition(camPos);
//.........这里部分代码省略.........
示例11: processInput
void World::processInput()
{
using namespace OIS;
static Ogre::Timer timer;
static unsigned long lastTime = 0;
unsigned long currentTime = timer.getMilliseconds();
//Calculate the amount of time passed since the last frame
Real timeScale = (currentTime - lastTime) * 0.001f;
if (timeScale < 0.001f)
timeScale = 0.001f;
lastTime = currentTime;
//Get the current state of the keyboard and mouse
keyboard->capture();
mouse->capture();
//Always exit if ESC is pressed
if (keyboard->isKeyDown(OIS::KC_ESCAPE))
running = false;
//Reload the scene if R is pressed
static bool reloadedLast = false;
if (keyboard->isKeyDown(OIS::KC_R) && !reloadedLast){
unload();
load();
reloadedLast = true;
}
else {
reloadedLast = false;
}
//Get mouse movement
const OIS::MouseState &ms = mouse->getMouseState();
//Update camera rotation based on the mouse
camYaw += Radian(-ms.X.rel / 200.0f);
camPitch += Radian(-ms.Y.rel / 200.0f);
camera->setOrientation(Quaternion::IDENTITY);
camera->pitch(camPitch);
camera->yaw(camYaw);
//Allow the camera to move around with the arrow/WASD keys
Ogre::Vector3 trans(0, 0, 0);
if (keyboard->isKeyDown(KC_UP) || keyboard->isKeyDown(KC_W))
trans.z = -1;
if (keyboard->isKeyDown(KC_DOWN) || keyboard->isKeyDown(KC_S))
trans.z = 1;
if (keyboard->isKeyDown(KC_RIGHT) || keyboard->isKeyDown(KC_D))
trans.x = 1;
if (keyboard->isKeyDown(KC_LEFT) || keyboard->isKeyDown(KC_A))
trans.x = -1;
if (keyboard->isKeyDown(KC_PGUP) || keyboard->isKeyDown(KC_E))
trans.y = 1;
if (keyboard->isKeyDown(KC_PGDOWN) || keyboard->isKeyDown(KC_Q))
trans.y = -1;
//Shift = speed boost
if (keyboard->isKeyDown(KC_LSHIFT) || keyboard->isKeyDown(KC_RSHIFT))
trans *= 4;
else
trans *= 0.5f;
trans *= 30;
camera->moveRelative(trans * timeScale);
//Make sure the camera doesn't go under the terrain
Ogre::Vector3 camPos = camera->getPosition();
float terrY = HeightFunction::getTerrainHeight(camPos.x, camPos.z);
if (camPos.y < terrY + 1.5 || !keyboard->isKeyDown(KC_SPACE)){ //Space = walk
camPos.y = terrY + 1.5;
camera->setPosition(camPos);
}
}
示例12: setup
// Setup
//-------------------------------------------------------------------------------------
bool BaseApp::setup()
{
Ogre::Timer ti;
LogO("*** start setup ***");
if (pSet->rendersystem == "Default")
{
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
pSet->rendersystem = "Direct3D9 Rendering Subsystem";
#else
pSet->rendersystem = "OpenGL Rendering Subsystem";
#endif
}
//LogManager::getSingleton().setLogDetail(LL_BOREME); //-
#ifdef _DEBUG
#define D_SUFFIX "_d"
#else
#define D_SUFFIX ""
#endif
// when show ogre dialog is on, load both rendersystems so user can select
if (pSet->ogre_dialog)
{
mRoot->loadPlugin(PATHMANAGER::OgrePluginDir() + "/RenderSystem_GL" + D_SUFFIX);
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
mRoot->loadPlugin(PATHMANAGER::OgrePluginDir() + "/RenderSystem_Direct3D9" + D_SUFFIX);
#endif
}else{
if (pSet->rendersystem == "OpenGL Rendering Subsystem")
mRoot->loadPlugin(PATHMANAGER::OgrePluginDir() + "/RenderSystem_GL" + D_SUFFIX);
else if (pSet->rendersystem == "Direct3D9 Rendering Subsystem")
mRoot->loadPlugin(PATHMANAGER::OgrePluginDir() + "/RenderSystem_Direct3D9" + D_SUFFIX);
}
mRoot->loadPlugin(PATHMANAGER::OgrePluginDir() + "/Plugin_ParticleFX" + D_SUFFIX);
setupResources();
if (!configure())
return false;
mSceneMgr = mRoot->createSceneManager(/*ST_GENERIC/**/Ogre::ST_EXTERIOR_FAR/**/);
#if OGRE_VERSION >= MYGUI_DEFINE_VERSION(1, 9, 0)
Ogre::OverlaySystem* pOverlaySystem = new Ogre::OverlaySystem();
mSceneMgr->addRenderQueueListener(pOverlaySystem);
#endif
createCamera();
Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5);
mSceneMgr->setFog(Ogre::FOG_NONE);
loadResources();
baseInitGui();
createFrameListener();
LogO(Ogre::String("::: Time Ogre Start: ") + fToStr(ti.getMilliseconds(),0,3) + " ms");
createScene();
return true;
}
示例13: startEventLoop
/*!
* Starts the main event loop. This function does not return, unless the
* application is supposed to quit - either by closing the rendering window or
* by telling the \ref InputHandler to quit (see \ref InputHandler::queueQuit).
*/
void TestApp::startEventLoop()
{
// try {
Ogre::Timer timer;
unsigned long lastFrameStarted = timer.getMilliseconds();
mFrameCount = 0;
#ifdef USE_CALLGRIND
CALLGRIND_START_INSTRUMENTATION;
CALLGRIND_TOGGLE_COLLECT; // switch collect off
#endif
while (!mInputHandler->getWantQuit() && (!mRenderWindow->isClosed() || !mUseGUI))
{
mFrameHistory->startFrame();
// emulate Ogre's timeSinceLastFrame feature
unsigned long now = timer.getMilliseconds();
float timeSinceLastFrame = ((float)(now - lastFrameStarted)) / 1000.0f;
lastFrameStarted = now;
mInputHandler->captureInput(timeSinceLastFrame);
Ogre::WindowEventUtilities::messagePump();
// AB: note: a "scene frame" is not necessarily a "graphic frame".
// -> the collision detection library may be called more often or less
// often than ogre.
// usually we should NOT couple the scene speed to the rendering
// speed, otherwise the scene will be VERY fast with a newer graphic
// card
//
// we do this here atm for the sake of simplicity only. we really
// should use a timer instead.
if (!mInputHandler->getPause() )
{
if (!mInputHandler->isChecked("PauseMovements"))
{
mSceneUpdateHistory->startFrame();
mScene->beginNextSceneFrame();
}
mSceneUpdateHistory->stopFrame();
}
if (mUseGUI)
{
if (!mGui->updateGui(mInputHandler->getPause()))
{
mInputHandler->queueQuit();
}
mGraphicFrameHistory->startFrame();
mOgreRoot->renderOneFrame();
mGraphicFrameHistory->stopFrame();
}
mFrameHistory->stopFrame();
mFrameCount++;
if (mMaxFrameCount > 0 && mFrameCount >= mMaxFrameCount)
{
mInputHandler->queueQuit();
}
}
//} catch (Exception e) {
// std::cerr << "Unhandled exception reached main-program: \n"
// << e.getErrorMessage() <<std::endl;
// e.printBacktrace();
// exit(1);
//}
}
示例14: noKinectBeforeFrame
// This dummy rouytine lets us test some of the rendering when we don't have
// a Kinect
bool OgreCPP::noKinectBeforeFrame()
{
static Ogre::Timer a;
static uint32_t lastTimeMS;
static uint32_t curTimeMS;
curTimeMS = a.getMilliseconds();
uint32_t timeDiffMS = curTimeMS - lastTimeMS;
if ( timeDiffMS > 0 )
{
printf( "FPS = %f\n", 1000.0/(float)timeDiffMS );//1.0/((float)timeDiffMS/1000.0) );
}
lastTimeMS = curTimeMS;
// Draw the crowd
uint32_t numCrowdMembers = mCrowdMembers.size();
// Check to see if we should add a new crowd member
if ( numCrowdMembers < 4800 && mRecordingGapTimer.getMilliseconds() > 1 ) //TIME_BETWEEN_RECORDINGS_MS )
{
// Draw a moving rectangle as a stand in for a crowd member
memset( mpImageData, 0, RECORDED_DATA_SIZE );
memset( mpLowResImageData, 0, LOW_RES_RECORDED_DATA_SIZE );
static const uint32_t PERSON_WIDTH = SMALL_FRAME_WIDTH/10;
static const uint32_t PERSON_HEIGHT = SMALL_FRAME_HEIGHT/3;
for ( uint32_t frameIdx = 0; frameIdx < NUM_FRAMES_TO_RECORD; frameIdx++ )
{
uint32_t leftX = 4*PERSON_WIDTH + ((float)frameIdx/(float)NUM_FRAMES_TO_RECORD)*2.0*(float)PERSON_WIDTH;
for ( uint32_t y = SMALL_FRAME_HEIGHT - PERSON_HEIGHT; y < SMALL_FRAME_HEIGHT; y++ )
{
for ( uint32_t x = leftX; x < leftX + PERSON_WIDTH; x++ )
{
int32_t smallPixelIdx = frameIdx*SMALL_FRAME_WIDTH*SMALL_FRAME_HEIGHT
+ y*SMALL_FRAME_WIDTH + x;
mpImageData[ smallPixelIdx ] = 0xFF;
if ( y%LOW_RES_DIVIDE == 0 && x%LOW_RES_DIVIDE == 0 )
{
int32_t lowResPixelIdx = frameIdx*LOW_RES_SMALL_FRAME_WIDTH*LOW_RES_SMALL_FRAME_HEIGHT
+ y/LOW_RES_DIVIDE*LOW_RES_SMALL_FRAME_WIDTH + x/LOW_RES_DIVIDE;
mpLowResImageData[ lowResPixelIdx ] = 0xFF;
}
}
}
}
createNewCrowdMember( 0.5 );
mbRecording = false;
mRecordingGapTimer.reset(); // Reset time so that there's a gap between recording
//`printf( "Got frame\n" );
printf( "Crowd size is now %i\n", (int32_t)mCrowdMembers.size() );
}
return true;
}
示例15: beforeFrame
bool OgreCPP::beforeFrame(void)
{
static Ogre::Timer a;
static uint32_t lastTimeMS;
static uint32_t curTimeMS;
curTimeMS = a.getMilliseconds();
uint32_t timeDiffMS = curTimeMS - lastTimeMS;
// if ( timeDiffMS > 0 )
// {
// printf( "FPS = %f\n", 1000.0/(float)timeDiffMS );//1.0/((float)timeDiffMS/1000.0) );
// }
lastTimeMS = curTimeMS;
const int32_t MAX_DEPTH_MM = 10000;
const float FOCAL_LENGTH = 0.525f; // Focal length in metres
const float FADE_START_XZ_DISTANCE = 0.5f;
const float FADE_MAX_XZ_DISTANCE = 6.0f;
xn::SceneMetaData sceneMD;
xn::DepthMetaData depthMD;
mpKinectController->getContext().WaitAndUpdateAll();
mpKinectController->getDepthGenerator().GetMetaData( depthMD );
mpKinectController->getUserGenerator().GetUserPixels( 0, sceneMD ); // Scene data is bitmap with just user id's for pixels
XnUserID userIdx[15];
XnUInt16 numUsers = 15;
mpKinectController->getUserGenerator().GetUsers( userIdx, numUsers );
numUsers = mpKinectController->getUserGenerator().GetNumberOfUsers();
// Confirm that a user is in the centre of the screen
const XnDepthPixel* pScene = sceneMD.Data();
pScene += SMALL_FRAME_WIDTH/2;
bool bUserInCentreOfScreen = false;
int maxCount = sceneMD.XRes() * sceneMD.YRes();
for ( uint32_t x = SMALL_FRAME_WIDTH/2; x < maxCount; x+=SMALL_FRAME_WIDTH )
{
if ( pScene[x] > 0 )
{
// User pixel found
bUserInCentreOfScreen = 1;
break;
}
}
if ( !bUserInCentreOfScreen && RESET_TIMER_IF_NO_USER )
{
// Restart the time if there are no users to record
mRecordingGapTimer.reset();
}
// Start recording if we see a person
if ( bUserInCentreOfScreen && (numUsers > 0)
&& (!mbRecording) && (mRecordingGapTimer.getMilliseconds() > TIME_BETWEEN_RECORDINGS_MS) )
{
printf("START RECORDING\n");
mbRecording = true;
memset( mpImageData, 0, RECORDED_DATA_SIZE );
memset( mpLowResImageData, 0, LOW_RES_RECORDED_DATA_SIZE );
mAnimationTimer.reset();
mRecordingFrameIdx = 0;
}
/* Build an accumulative histogram to work out the colour for each point */
uint32_t depthHist[ MAX_DEPTH_MM ];
memset( depthHist, 0, sizeof( depthHist ) );
uint32_t numPoints = 0;
const XnDepthPixel* pDepth = depthMD.Data();
int32_t recordingPixelStepX = depthMD.XRes() / SMALL_FRAME_WIDTH;
int32_t recordingPixelStepY = depthMD.YRes() / SMALL_FRAME_HEIGHT;
if ( recordingPixelStepX <= 0 ) recordingPixelStepX = 1;
if ( recordingPixelStepY <= 0 ) recordingPixelStepY = 1;
int32_t lowResRecordingPixelStepX = depthMD.XRes() / LOW_RES_SMALL_FRAME_WIDTH;
int32_t lowResRecordingPixelStepY = depthMD.YRes() / LOW_RES_SMALL_FRAME_HEIGHT;
if ( lowResRecordingPixelStepX <= 0 ) lowResRecordingPixelStepX = 1;
if ( lowResRecordingPixelStepY <= 0 ) lowResRecordingPixelStepY = 1;
// loop through data to look for users
for ( uint32_t y = 0; y < depthMD.YRes(); y++ ){
for ( uint32_t x = 0; x < depthMD.XRes(); x++ ){
XnUInt16 value = *pDepth;
if ( 0 != value ){
depthHist[ value ]++;
numPoints++;
}
pDepth++;
}
}
for ( uint32_t i = 1; i < MAX_DEPTH_MM; i++ ){
depthHist[ i ] += depthHist[ i - 1 ];
}
if ( numPoints > 0 ){
//.........这里部分代码省略.........