bool Game::initialize() { if( !initializeOgre() ) return false; if( !initializeCEGUI() ) return false; if( !initializeOIS() ) return false; if( !initializeBullet() ) return false; //create the plane in Ogre3D Ogre::Plane plane(Ogre::Vector3::UNIT_Z, -15); Ogre::MeshManager::getSingleton().createPlane("ground", "meshes", plane, 1500, 1500, 20, 20, true, 1, 5, 5, Ogre::Vector3::UNIT_Y); Ogre::Entity* entGround = m_pScene->createEntity("ground"); Ogre::SceneNode* groundNode = m_pScene->getRootSceneNode()->createChildSceneNode("groundNode"); groundNode->attachObject(entGround); entGround->setMaterialName("BluePill"); //create the Bullet ground plane m_pGroundShape = new btStaticPlaneShape(btVector3(0, 0, 1), -15); m_pGroundMotionState = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, 0, -1))); btRigidBody::btRigidBodyConstructionInfo groundRigidBodyCI(0, m_pGroundMotionState, m_pGroundShape, btVector3(0, 0, 0)); m_pGroundBody = new btRigidBody(groundRigidBodyCI); m_pDynamicsWorld->addRigidBody(m_pGroundBody); //create the player in Ogre3D Ogre::String meshname = "Pill.mesh"; Ogre::Entity* entity = m_pScene->createEntity(meshname); m_pPlayerSceneNode = m_pRootSceneNode->createChildSceneNode(); m_pPlayerSceneNode->attachObject(entity); m_pPlayerSceneNode->scale(Ogre::Vector3(0.5f, 0.5f, 0.5f)); m_PlayerPosition = Ogre::Vector3(0.0f, 0.0f, -10.0f); m_PlayerVelocity = Ogre::Vector3(0.0f, 0.0f, 0.0f); m_pPlayerSceneNode->translate(m_PlayerPosition); //create the Bullet player m_pPlayerShape = new btBoxShape(btVector3(1,1,1)); m_pPlayerMotionState = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, 0, -10))); btScalar playerMass = 1; btVector3 playerInertia(0, 0, 0); m_pPlayerShape->calculateLocalInertia(playerMass, playerInertia); btRigidBody::btRigidBodyConstructionInfo playerRigidBodyCI(playerMass, m_pPlayerMotionState, m_pPlayerShape, playerInertia); m_pPlayerBody = new btRigidBody(playerRigidBodyCI); //body->setRestitution(1); m_pPlayerBody->setUserPointer(m_pPlayerSceneNode); m_pDynamicsWorld->addRigidBody(m_pPlayerBody); return true; }//Game::initialize
void Application::initialize() { initializeOgre(); initializeOISB(); initializeCEGUI(); }
void OgreWidget::paintEvent(QPaintEvent* event) { // qDebug() << __PRETTY_FUNCTION__; if(!mOgreRenderWindow) { initializeOgre(); } QMutexLocker locker(&mMutex); if(!mOgreRoot) initializeOgre(); if(mTerrainGroup->isDerivedDataUpdateInProgress()) { if(mTerrainsImported) { qDebug() << "OgreWidget::paintEvent(): DerivedDataUpdateInProgress, building terrain, please wait"; mSimulator->statusBar()->showMessage("Building terrain, please wait..."); } else { qDebug() << "OgreWidget::paintEvent(): DerivedDataUpdateInProgress, updating textures, please wait"; mSimulator->statusBar()->showMessage("Updating textures, patience..."); } } else { if(mTerrainsImported) { qDebug() << "OgreWidget::paintEvent(): saving terrains "; mSimulator->statusBar()->showMessage("Saving all terrains."); mTerrainGroup->saveAllTerrains(true); mTerrainsImported = false; //mSimulator->statusBar()->hide(); } } mOgreRoot->_fireFrameStarted(); // this should be IN a frame listener! animation currently unused // if(mVehicleAnimationState) mVehicleAnimationState->addTime(0.1); // qDebug() << "now rendering"; // Construct all laserscanner rays before rendering QList<LaserScanner*> *laserScanners = mSimulator->mLaserScanners; for(int i = 0; i < laserScanners->size(); ++i) { LaserScanner* scanner = laserScanners->at(i); Ogre::Ray beam = scanner->getCurrentLaserBeam(); Q_ASSERT(scanner->getSceneNode()->getParent() == mVehicleNode); // scanner->getSceneNode()->_update(false, true); scanner->mRayObject->clear(); if(scanner->isScanning()) { scanner->mRayObject->begin(QString("RayFrom_" + scanner->objectName() + "_material").toStdString(), Ogre::RenderOperation::OT_LINE_LIST); // scanner->mRayObject->position(mVehicleNode->_getDerivedPosition() + mVehicleNode->getOrientation() * scanner->getSceneNode()->getPosition()); scanner->mRayObject->position(scanner->getSceneNode()->_getDerivedPosition()); // scanner->mRayObject->position(beam.getPoint(0.0)); scanner->mRayObject->position(beam.getPoint(scanner->range())); scanner->mRayObject->end(); } } mOgreRenderWindow->update(); // qDebug() << "rendering done"; mOgreRoot->_fireFrameEnded(); if(mFrameCount++ % 25 == 0) emit currentRenderStatistics(size(), mOgreRenderWindow->getTriangleCount(), mOgreRenderWindow->getLastFPS()); event->accept(); }