示例#1
0
BOOL CEditor::Load(LPCTSTR lpszPathName)
{
	SetCursor(LoadCursor(NULL, IDC_WAIT));

	RestoreCurrentDirectory();

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

	// Important to set these so that the terrain knows what to use for derived (non-realtime) data
	mTerrainGlobals->setLightMapDirection(mTerrainLight->getDerivedDirection());
	mTerrainGlobals->setCompositeMapAmbient(mSceneManager->getAmbientLight());
	mTerrainGlobals->setCompositeMapDiffuse(mTerrainLight->getDiffuseColour());

	//Ogre::TerrainMaterialGeneratorA::SM2Profile* matProfile = 
	//	static_cast<Ogre::TerrainMaterialGeneratorA::SM2Profile*>(mTerrainGlobals->getDefaultMaterialGenerator()->getActiveProfile());
	//matProfile->setLightmapEnabled(false);

	//Configure default import settings for if we use imported image
	Ogre::Terrain::ImportData& defaultimp = mTerrainGroup->getDefaultImportSettings();
	defaultimp.terrainSize = TERRAIN_SIZE;
	defaultimp.worldSize = TERRAIN_WORLD_SIZE;
	defaultimp.inputScale = 600;
	defaultimp.minBatchSize = 33;
	defaultimp.maxBatchSize = 65;
	// textures
	defaultimp.layerList.resize(1);
	defaultimp.layerList[0].worldSize = 100;
	defaultimp.layerList[0].textureNames.push_back("dirt_grayrocky_diffusespecular.dds");
	defaultimp.layerList[0].textureNames.push_back("dirt_grayrocky_normalheight.dds");


	DefineTerrain(0, 0, false);
	// sync load since we want everything in place when we start
	mTerrainGroup->loadAllTerrains(true);
	mTerrainGroup->freeTemporaryResources();

	mSceneManager->setSkyBox(true, "Examples/CloudyNoonSkyBox");
	//Ocean *_Ocean = new Ocean( 60.0f,mSceneManager,mCamera );

	SetCursor(LoadCursor(NULL, IDC_ARROW));

	mHaveLevel = true;
	return TRUE;
}
示例#2
0
void TerrainManager::CreateTerrain(std::string terrainName, std::string fileExtension,
                                   std::string heightMapFileName, std::string directionalLightName,
                                   Ogre::uint16 terrainSize, Ogre::Real worldSize, Ogre::Real inputScale)
{
    mHeightMapFileName = heightMapFileName;
    mTerrainSize = terrainSize;
    mWorldSize = worldSize;
    mInputScale = inputScale;

    mTerrainGlobals = OGRE_NEW Ogre::TerrainGlobalOptions();
    mTerrainGroup = OGRE_NEW Ogre::TerrainGroup(GameManager::GetInstance()->GetSceneManager(),
                    Ogre::Terrain::ALIGN_X_Z, mTerrainSize, mWorldSize);
    mTerrainGroup->setFilenameConvention(Ogre::String(terrainName), fileExtension);
    mTerrainGroup->setOrigin(Ogre::Vector3::ZERO);

    ConfigureTerrainDefaults(GameManager::GetInstance()->GetSceneManager()->getLight(directionalLightName));

    for (long x = 0; x <= 0; ++x)
        for (long y = 0; y <= 0; ++y)
            DefineTerrain(x, y);

    // sync load since we want everything in place when we start
    mTerrainGroup->loadAllTerrains(true);

    if (mTerrainsImported)
    {
        Ogre::TerrainGroup::TerrainIterator ti = mTerrainGroup->getTerrainIterator();
        while(ti.hasMoreElements())
        {
            Ogre::Terrain* t = ti.getNext()->instance;
            InitBlendMaps(t);
        }
        //mTerrainGroup->saveAllTerrains(true);
        mTerrainsImported = false;
    }

    mTerrainGroup->freeTemporaryResources();

    CreatePhysicsShape();
}