Пример #1
0
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
Пример #2
0
void Application::initialize()
{
    initializeOgre();
    initializeOISB();
    initializeCEGUI();
}
Пример #3
0
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();
}