void setupContent()
  {
    bool blankTerrain = false;
    //blankTerrain = true;
    mTerrainGlobals = OGRE_NEW TerrainGlobalOptions();

    ResourceGroupManager::getSingleton().createResourceGroup( "Terrain" );
    ResourceGroupManager::getSingleton().addResourceLocation( mFSLayer->getWritablePath( "" ), "FileSystem", "Terrain", false, false );

    mEditMarker = mSceneMgr->createEntity( "editMarker", "sphere.mesh" );
    mEditNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
    mEditNode->attachObject( mEditMarker );
    mEditNode->setScale( 0.05, 0.05, 0.05 );

    setupControls();

    mCameraMan->setTopSpeed( 50 );

    setDragLook( true );

    MaterialManager::getSingleton().setDefaultTextureFiltering( TFO_ANISOTROPIC );
    MaterialManager::getSingleton().setDefaultAnisotropy( 7 );

    mSceneMgr->setFog( FOG_LINEAR, ColourValue( 0.7, 0.7, 0.8 ), 0, 10000, 25000 );

    LogManager::getSingleton().setLogDetail( LL_BOREME );

    Vector3 lightdir( 0.55, -0.3, 0.75 );
    lightdir.normalise();

    Light* l = mSceneMgr->createLight( "tstLight" );
    l->setType( Light::LT_DIRECTIONAL );
    l->setDirection( lightdir );
    l->setDiffuseColour( ColourValue::White );
    l->setSpecularColour( ColourValue( 0.4, 0.4, 0.4 ) );

    mSceneMgr->setAmbientLight( ColourValue( 0.2, 0.2, 0.2 ) );

    mTerrainGroup = OGRE_NEW TerrainGroup( mSceneMgr, Terrain::ALIGN_X_Z, TERRAIN_SIZE, TERRAIN_WORLD_SIZE );
    mTerrainGroup->setFilenameConvention( TERRAIN_FILE_PREFIX, TERRAIN_FILE_SUFFIX );
    mTerrainGroup->setOrigin( mTerrainPos );
    mTerrainGroup->setResourceGroup( "Terrain" );

    configureTerrainDefaults( l );
#ifdef PAGING
    // Paging setup
    mPageManager = OGRE_NEW PageManager();
    // Since we're not loading any pages from .page files, we need a way just 
    // to say we've loaded them without them actually being loaded
    mPageManager->setPageProvider( &mDummyPageProvider );
    mPageManager->addCamera( mCamera );
    mTerrainPaging = OGRE_NEW TerrainPaging( mPageManager );
    PagedWorld* world = mPageManager->createWorld();
    mTerrainPaging->createWorldSection( world, mTerrainGroup, 2000, 3000,
      TERRAIN_PAGE_MIN_X, TERRAIN_PAGE_MIN_Y,
      TERRAIN_PAGE_MAX_X, TERRAIN_PAGE_MAX_Y );
#else
    for( long x = TERRAIN_PAGE_MIN_X; x <= TERRAIN_PAGE_MAX_X; ++x )
      for( long y = TERRAIN_PAGE_MIN_Y; y <= TERRAIN_PAGE_MAX_Y; ++y )
        defineTerrain( x, y, blankTerrain );
    // sync load since we want everything in place when we start
    mTerrainGroup->loadAllTerrains( true );
#endif
    if( mTerrainsImported )
    {
      TerrainGroup::TerrainIterator ti = mTerrainGroup->getTerrainIterator();
      while( ti.hasMoreElements() )
      {
        Terrain* t = ti.getNext()->instance;
        initBlendMaps( t );
      }
    }

    mTerrainGroup->freeTemporaryResources();
    // create a few entities on the terrain
    Entity* e = mSceneMgr->createEntity( "tudorhouse.mesh" );
    Vector3 entPos( mTerrainPos.x + 2043, 0, mTerrainPos.z + 1715 );
    Quaternion rot;
    entPos.y = mTerrainGroup->getHeightAtWorldPosition( entPos ) + 65.5 + mTerrainPos.y;
    rot.FromAngleAxis( Degree( Math::RangeRandom( -180, 180 ) ), Vector3::UNIT_Y );
    SceneNode* sn = mSceneMgr->getRootSceneNode()->createChildSceneNode( entPos, rot );
    sn->setScale( Vector3( 0.12, 0.12, 0.12 ) );
    sn->attachObject( e );
    mHouseList.push_back( e );

    e = mSceneMgr->createEntity( "tudorhouse.mesh" );
    entPos = Vector3( mTerrainPos.x + 1850, 0, mTerrainPos.z + 1478 );
    entPos.y = mTerrainGroup->getHeightAtWorldPosition( entPos ) + 65.5 + mTerrainPos.y;
    rot.FromAngleAxis( Degree( Math::RangeRandom( -180, 180 ) ), Vector3::UNIT_Y );
    sn = mSceneMgr->getRootSceneNode()->createChildSceneNode( entPos, rot );
    sn->setScale( Vector3( 0.12, 0.12, 0.12 ) );
    sn->attachObject( e );
    mHouseList.push_back( e );

    e = mSceneMgr->createEntity( "tudorhouse.mesh" );
    entPos = Vector3( mTerrainPos.x + 1970, 0, mTerrainPos.z + 2180 );
    entPos.y = mTerrainGroup->getHeightAtWorldPosition( entPos ) + 65.5 + mTerrainPos.y;
    rot.FromAngleAxis( Degree( Math::RangeRandom( -180, 180 ) ), Vector3::UNIT_Y );
    sn = mSceneMgr->getRootSceneNode()->createChildSceneNode( entPos, rot );
    sn->setScale( Vector3( 0.12, 0.12, 0.12 ) );
    sn->attachObject( e );
    mHouseList.push_back( e );

    mSceneMgr->setSkyBox( true, "Examples/CloudyNoonSkyBox" );
  }
Beispiel #2
0
void PGSampleApp::createScene(void)
{
	bool blankTerrain = false;
	mTerrainGlobals = OGRE_NEW TerrainGlobalOptions();

	Vector3 lightdir(0.55, -0.3, 0.75);
	lightdir.normalise();


	Light* l = mSceneMgr->createLight("tstLight");
	l->setType(Light::LT_DIRECTIONAL);
	l->setDirection(lightdir);
	l->setDiffuseColour(ColourValue::White);
	l->setSpecularColour(ColourValue(0.4, 0.4, 0.4));

	mSceneMgr->setAmbientLight(ColourValue(0.2, 0.2, 0.2));


	mTerrainGroup = OGRE_NEW TerrainGroup(mSceneMgr, Terrain::ALIGN_X_Z, TERRAIN_SIZE, TERRAIN_WORLD_SIZE);
	mTerrainGroup->setFilenameConvention(TERRAIN_FILE_PREFIX, TERRAIN_FILE_SUFFIX);
	mTerrainGroup->setOrigin(mTerrainPos + Vector3(TERRAIN_WORLD_SIZE/2, 0, TERRAIN_WORLD_SIZE/2));

	configureTerrainDefaults(l);
#ifdef PAGING
	// Paging setup
	mPageManager = OGRE_NEW PageManager();
	// Since we're not loading any pages from .page files, we need a way just 
	// to say we've loaded them without them actually being loaded
	mPageManager->setPageProvider(&mDummyPageProvider);
	mPageManager->addCamera(mCamera);
	mTerrainPaging = OGRE_NEW TerrainPaging(mPageManager);
	PagedWorld* world = mPageManager->createWorld();
	mTerrainPaging->createWorldSection(world, mTerrainGroup, 2000, 3000, 
		TERRAIN_PAGE_MIN_X, TERRAIN_PAGE_MIN_Y, 
		TERRAIN_PAGE_MAX_X, TERRAIN_PAGE_MAX_Y);
#else
	for (long x = TERRAIN_PAGE_MIN_X; x <= TERRAIN_PAGE_MAX_X; ++x)
		for (long y = TERRAIN_PAGE_MIN_Y; y <= TERRAIN_PAGE_MAX_Y; ++y)
			defineTerrain(x, y, blankTerrain);
	// sync load since we want everything in place when we start
	mTerrainGroup->loadAllTerrains(true);
#endif

	if (mTerrainsImported)
	{
		TerrainGroup::TerrainIterator ti = mTerrainGroup->getTerrainIterator();
		while(ti.hasMoreElements())
		{
			Terrain* t = ti.getNext()->instance;
			initBlendMaps(t);
		}
	}

	mTerrainGroup->freeTemporaryResources();



	// create a few entities on the terrain
	Entity* e = mSceneMgr->createEntity("tudorhouse.mesh");
	Vector3 entPos(mTerrainPos.x + 2043, 0, mTerrainPos.z + 1715);
	Quaternion rot;
	entPos.y = mTerrainGroup->getHeightAtWorldPosition(entPos) + 65.5 + mTerrainPos.y;
	rot.FromAngleAxis(Degree(Math::RangeRandom(-180, 180)), Vector3::UNIT_Y);
	SceneNode* sn = mSceneMgr->getRootSceneNode()->createChildSceneNode(entPos, rot);
	sn->setScale(Vector3(0.12, 0.12, 0.12));
	sn->attachObject(e);
	mHouseList.push_back(e);

	e = mSceneMgr->createEntity("tudorhouse.mesh");
	entPos = Vector3(mTerrainPos.x + 1850, 0, mTerrainPos.z + 1478);
	entPos.y = mTerrainGroup->getHeightAtWorldPosition(entPos) + 65.5 + mTerrainPos.y;
	rot.FromAngleAxis(Degree(Math::RangeRandom(-180, 180)), Vector3::UNIT_Y);
	sn = mSceneMgr->getRootSceneNode()->createChildSceneNode(entPos, rot);
	sn->setScale(Vector3(0.12, 0.12, 0.12));
	sn->attachObject(e);
	mHouseList.push_back(e);

	e = mSceneMgr->createEntity("tudorhouse.mesh");
	entPos = Vector3(mTerrainPos.x + 1970, 0, mTerrainPos.z + 2180);
	entPos.y = mTerrainGroup->getHeightAtWorldPosition(entPos) + 65.5 + mTerrainPos.y;
	rot.FromAngleAxis(Degree(Math::RangeRandom(-180, 180)), Vector3::UNIT_Y);
	sn = mSceneMgr->getRootSceneNode()->createChildSceneNode(entPos, rot);
	sn->setScale(Vector3(0.12, 0.12, 0.12));
	sn->attachObject(e);
	mHouseList.push_back(e);

	mSceneMgr->setSkyBox(true, "Examples/CloudyNoonSkyBox");


	configureShadows(true, false);

	mCamera->setPosition(mTerrainPos + Vector3(1683, 50, 2116));
	mCamera->lookAt(Vector3(1963, 50, 1660));
	mCamera->setNearClipDistance(0.1);
	mCamera->setFarClipDistance(50000);

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

}