Example #1
0
DestructibleBridgeDemo::DestructibleBridgeDemo(hkDemoEnvironment* env)
	:	hkDefaultPhysicsDemo(env)
{

	const DestructibleBridgeVariant& variant = g_variants[m_variantId];

	//
	// Setup the camera
	//
	{
		hkVector4 from( 0.0f, 20.0f, -160.0f);
		hkVector4 to  ( 0.0f,  0.0f,    0.0f);
		hkVector4 up  ( 0.0f,  1.0f,    0.0f);
		setupDefaultCameras(env, from, to, up);
	}

	//
	// Create the world
	//
	{
		hkpWorldCinfo worldInfo;
		{
			worldInfo.m_gravity.set(0.0f, -9.81f, 0.0f);
			worldInfo.setBroadPhaseWorldSize(1000.0f);
		}
		m_world = new hkpWorld(worldInfo);
		m_world->lock();

		// Register ALL agents (though some may not be necessary)
		hkpAgentRegisterUtil::registerAllAgents(m_world->getCollisionDispatcher());
		setupGraphics();
	}

	//
	//	Create the break off utility
	//
	{
		m_breakUtil = new hkpBreakOffPartsUtil( m_world, this );
	}

	// create the terrain and the bridge(s)
	setupTerrain();

	// create the airplanes
	setupAirplanes(variant.m_type, variant.m_numPlanes);

	m_world->unlock();
}
Example #2
0
void OgreWidget::initializeOgre()
{
    mOgreRoot = new Ogre::Root;

    Ogre::RenderSystem *renderSystem = mOgreRoot->getRenderSystemByName("OpenGL Rendering Subsystem");
    mOgreRoot->setRenderSystem(renderSystem);
    mOgreRoot->initialise(false);

    Ogre::NameValuePairList viewConfig;
    QWidget *parentWidget = dynamic_cast <QWidget *>(parent());

    Ogre::String windowHandle = Ogre::StringConverter::toString ((unsigned long)QX11Info::display()) +
            ":" + Ogre::StringConverter::toString ((unsigned int)QX11Info::appScreen()) +
            ":" + Ogre::StringConverter::toString ((unsigned long)parentWidget->winId());


    qDebug() << __PRETTY_FUNCTION__ << "using window handle" << QString::fromStdString(windowHandle);
    viewConfig["parentWindowHandle"] = windowHandle;
    viewConfig["vsync"] = "true"; // this actually works on linux/nvidia-blob/thinkpad!

    mOgreRenderWindow = mOgreRoot->createRenderWindow("OgreRenderWindow", width(), height(), false, &viewConfig);

    mOgreRenderWindow->setActive(true);

    Ogre::SceneManagerEnumerator::MetaDataIterator iter = Ogre::SceneManagerEnumerator::getSingleton().getMetaDataIterator();
    while( iter.hasMoreElements() )
    {
        Ogre::String st = iter.getNext()->typeName;
        qDebug() << "Scene manager type available:" << QString::fromStdString(st);
    }

    mSceneManager = mOgreRoot->createSceneManager(Ogre::ST_GENERIC);
    //    ogreSceneManager = ogreRoot->createSceneManager("TerrainSceneManager"/*Ogre::ST_EXTERIOR_CLOSE*/);
    //    ogreSceneManager->showBoundingBoxes(true);

    // By default, entities cannot be found using a RSQ. This is to make sure that the
    // Lidar's don't catch the rotors, cameras etc. It also means we'll have to set the
    // flags to nonzero for any mesh that should be scannable.
    Ogre::MovableObject::setDefaultQueryFlags(0x00000000);

    mCamera = mSceneManager->createCamera("camera");
    mCamera->setNearClipDistance(.1);
    //mCamera->setPolygonMode(Ogre::PM_WIREFRAME);     /* wireframe */
    mCamera->setPolygonMode(Ogre::PM_SOLID);         /* solid */

    mCameraNode = mSceneManager->getRootSceneNode()->createChildSceneNode("CameraNode", Ogre::Vector3(0, 12, 15));
    mCameraNode->attachObject(mCamera);
    mCamera->lookAt(0,8,0);

    mOgreViewport = mOgreRenderWindow->addViewport(mCamera);
    mOgreViewport->setBackgroundColour(Ogre::ColourValue(0.7, 0.7, 0.7));
    mCamera->setAspectRatio(Ogre::Real(width()) / Ogre::Real(height()));

    if(mOgreRoot->getRenderSystem()->getCapabilities()->hasCapability(Ogre::RSC_INFINITE_FAR_PLANE))
    {
        mCamera->setFarClipDistance(0);   // enable infinite far clip distance if we can
    }

    // Initialize shader generator.
    // Must be before resource loading in order to allow parsing extended material attributes.
    if(!initializeRTShaderSystem(mSceneManager))
    {
        OGRE_EXCEPT(Ogre::Exception::ERR_FILE_NOT_FOUND,
                    "Shader Generator Initialization failed - Core shader libs path not found",
                    "SdkSample::_setup");
    }

    setupTerrain();

    // initialize trajectory line
    mTrajectoryLine = mSceneManager->createManualObject(QString("trajectoryLine_manualobject").toStdString());
    Ogre::SceneNode* mTrajectoryLineNode = mSceneManager->getRootSceneNode()->createChildSceneNode("trajectoryLine_node");

    Ogre::MaterialPtr trajectoryLineMaterial = Ogre::MaterialManager::getSingleton().create("trajectoryLineMaterial", "General");
    trajectoryLineMaterial->setReceiveShadows(false);
    trajectoryLineMaterial->getTechnique(0)->setLightingEnabled(true);
    trajectoryLineMaterial->getTechnique(0)->getPass(0)->setDiffuse(0,0,1,0);
    trajectoryLineMaterial->getTechnique(0)->getPass(0)->setAmbient(0,0,1);
    trajectoryLineMaterial->getTechnique(0)->getPass(0)->setSelfIllumination(0,0,1);
    //    trajectoryLineMaterial->dispose();  // dispose pointer, not the material
    mTrajectoryLineNode->attachObject(mTrajectoryLine);

    emit setupFinished();

    qDebug() << __PRETTY_FUNCTION__ << "done.";
}