Revision: 1596
http://rigsofrods.svn.sourceforge.net/rigsofrods/?rev=1596&view=rev
Author: rorthomas
Date: 2011-01-24 23:54:49 +0000 (Mon, 24 Jan 2011)
Log Message:
-----------
improved new terrains :)
Modified Paths:
--------------
trunk/source/main/RoRFrameListener.cpp
Modified: trunk/source/main/RoRFrameListener.cpp
===================================================================
--- trunk/source/main/RoRFrameListener.cpp 2011-01-24 02:25:13 UTC (rev
1595)
+++ trunk/source/main/RoRFrameListener.cpp 2011-01-24 23:54:49 UTC (rev
1596)
@@ -4773,6 +4773,14 @@
ds->readLine(line, 1023);
//geometry
ds->readLine(geom, 1023);
+
+ if(String(geom).find(".cfg2") != String::npos)
+ {
+ LogManager::getSingleton().logMessage("new terrain mode
enabled");
+ SETTINGS.setSetting("new Terrain Mode", "Yes");
+ }
+
+
//colour
ds->readLine(line, 1023);
//water stuff
@@ -5012,11 +5020,24 @@
// testing composite map
TerrainGlobalOptions::getSingleton().setCompositeMapDistance(mCamera->getFarClipDistance());//300);
//mTerrainGlobals->setUseRayBoxDistanceCalculation(true);
-
//mTerrainGlobals->getDefaultMaterialGenerator()->setDebugLevel(1);
- //mTerrainGlobals->setLightMapSize(256);
+
+ // adds strange colours for debug purposes
+
//TerrainGlobalOptions::getSingleton().getDefaultMaterialGenerator()->setDebugLevel(1);
+ // TBD: optimizations
+ /*
+ TerrainMaterialGeneratorA::SM2Profile* matProfile =
static_cast<TerrainMaterialGeneratorA::SM2Profile*>(TerrainGlobalOptions::getSingleton().getDefaultMaterialGenerator()->getActiveProfile());
+ matProfile->setLayerNormalMappingEnabled(false);
+ matProfile->setLayerSpecularMappingEnabled(false);
+ matProfile->setLayerParallaxMappingEnabled(false);
+
+ matProfile->setGlobalColourMapEnabled(false);
+ matProfile->setReceiveDynamicShadowsDepth(false);
+ */
+
TerrainGlobalOptions::getSingleton().setLightMapSize(256);
-
TerrainGlobalOptions::getSingleton().setCastsDynamicShadows(true);
+
TerrainGlobalOptions::getSingleton().setCastsDynamicShadows(false);
+
// Important to set these so that the terrain knows
what to use for derived (non-realtime) data
if(mainLight)
TerrainGlobalOptions::getSingleton().setLightMapDirection(mainLight->getDerivedDirection());
TerrainGlobalOptions::getSingleton().setCompositeMapAmbient(mSceneMgr->getAmbientLight());
@@ -5028,6 +5049,8 @@
defaultimp.terrainSize = TERRAIN_SIZE;
defaultimp.worldSize = TERRAIN_WORLD_SIZE;
+
//TerrainGlobalOptions::getSingleton().setDefaultGlobalColourMapSize(pageSize);
+
defaultimp.inputScale = pageMaxHeight;
if(!cfg.getSetting("minBatchSize").empty())
defaultimp.minBatchSize =
StringConverter::parseInt(cfg.getSetting("minBatchSize"));
@@ -5038,27 +5061,38 @@
// TBD: properly load textures:
http://www.ogre3d.org/forums/viewtopic.php?f=2&t=60302&start=0
// textures
- defaultimp.layerList.resize(3);
- defaultimp.layerList[0].worldSize = 10;
-
defaultimp.layerList[0].textureNames.push_back("dirt_grayrocky_diffusespecular.dds");
-
defaultimp.layerList[0].textureNames.push_back("dirt_grayrocky_normalheight.dds");
- defaultimp.layerList[1].worldSize = 10;
-
defaultimp.layerList[1].textureNames.push_back("growth_weirdfungus-03_diffusespecular.dds");
-
defaultimp.layerList[1].textureNames.push_back("growth_weirdfungus-03_normalheight.dds");
- defaultimp.layerList[2].worldSize = 20;
-
defaultimp.layerList[2].textureNames.push_back("grass_green-01_diffusespecular.dds");
-
defaultimp.layerList[2].textureNames.push_back("grass_green-01_normalheight.dds");
+ StringVector blendMaps, blendMode;
+ int numLayers =
StringConverter::parseInt(cfg.getSetting("Layers.count"));
+ if(numLayers > 0)
+ {
+ defaultimp.layerList.resize(numLayers+1);
+ blendMaps.resize(numLayers+1);
+ blendMode.resize(numLayers+1);
+ for(int i = 1; i<numLayers+1; i++)
+ {
+ defaultimp.layerList[i].worldSize =
StringConverter::parseReal(cfg.getSetting("Layers."+StringConverter::toString(i)+".size"));
+
defaultimp.layerList[i].textureNames.push_back(cfg.getSetting("Layers."+StringConverter::toString(i)+".diffuse"));
+
defaultimp.layerList[i].textureNames.push_back(cfg.getSetting("Layers."+StringConverter::toString(i)+".normal"));
+ blendMaps[i] =
cfg.getSetting("Layers."+StringConverter::toString(i)+".blendmap");
+ blendMode[i] =
cfg.getSetting("Layers."+StringConverter::toString(i)+".blendmapmode");
+ }
+ }
String filename = mTerrainGroup->generateFilename(0, 0);
- bool paging =
(ResourceGroupManager::getSingleton().resourceExists(mTerrainGroup->getResourceGroup(),
filename));
- if(!paging)
+ bool is_cached =
(ResourceGroupManager::getSingleton().resourceExists(mTerrainGroup->getResourceGroup(),
filename));
+
+ bool disableCaching = false;
+ if(!cfg.getSetting("disableCaching").empty())
+ disableCaching =
StringConverter::parseBool(cfg.getSetting("disableCaching"));
+
+ if(disableCaching || !is_cached)
{
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)
{
String filename =
mTerrainGroup->generateFilename(x, y);
- if
(ResourceGroupManager::getSingleton().resourceExists(mTerrainGroup->getResourceGroup(),
filename))
+ if (!disableCaching &&
ResourceGroupManager::getSingleton().resourceExists(mTerrainGroup->getResourceGroup(),
filename))
{
mTerrainGroup->defineTerrain(x, y);
}
@@ -5104,6 +5138,7 @@
}
}
}
+
// sync load since we want everything in place
when we start
mTerrainGroup->loadAllTerrains(true);
@@ -5113,37 +5148,10 @@
{
Terrain* terrain =
mTerrainGroup->getTerrain(x,y);
if(!terrain) continue;
- TerrainLayerBlendMap* blendMap0
= terrain->getLayerBlendMap(1);
- TerrainLayerBlendMap* blendMap1
= terrain->getLayerBlendMap(2);
- Real minHeight0 = 70;
- Real fadeDist0 = 40;
- Real minHeight1 = 70;
- Real fadeDist1 = 15;
- float* pBlend1 =
blendMap1->getBlendPointer();
- for (Ogre::uint16 yb = 0; yb <
terrain->getLayerBlendMapSize(); ++yb)
- {
- for (Ogre::uint16 xb =
0; xb < terrain->getLayerBlendMapSize(); ++xb)
- {
- Real tx, ty;
-
blendMap0->convertImageToTerrainSpace(xb, yb, &tx, &ty);
- Real height =
terrain->getHeightAtTerrainPosition(tx, ty);
- Real val =
(height - minHeight0) / fadeDist0;
- val =
Math::Clamp(val, (Real)0, (Real)1);
- //*pBlend0++ =
val;
-
- val = (height -
minHeight1) / fadeDist1;
- val =
Math::Clamp(val, (Real)0, (Real)1);
- *pBlend1++ =
val;
- }
- }
- blendMap0->dirty();
- blendMap1->dirty();
-
//blendMap0->loadImage("blendmap1.png",
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
- blendMap0->update();
- blendMap1->update();
-
// set up a colour map
+ /*
+ // this crashes badly!
String textureString =
"Texture.image." + StringConverter::toString(x) + "." +
StringConverter::toString(y);
String textureFilename =
cfg.getSetting(textureString);
if(textureFilename.empty())
@@ -5157,11 +5165,59 @@
terrain->setGlobalColourMapEnabled(true);
Image colourMap;
colourMap.load(textureFilename,
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
-
terrain->getGlobalColourMap()->loadImage(colourMap);
+ TexturePtr tp =
terrain->getGlobalColourMap();
+ if(!tp.isNull())
+
tp->loadImage(colourMap);
}
+ */
+
+ for(int
b=1;b<terrain->getLayerCount();b++)
+ {
+ Ogre::Image img;
+ ResourceGroupManager&
rgm = ResourceGroupManager::getSingleton();
+ String group="";
+ try
+ {
+ group =
ResourceGroupManager::getSingleton().findGroupContainingResource(blendMaps[b]);
+ }catch(...)
+ {
+ }
+ if(group.empty())
+ continue;
+ img.load(blendMaps[b],
group);
+
+ TerrainLayerBlendMap
*bm = terrain->getLayerBlendMap(b); // starting with 1, very strange ...
+
+ int bmSize =
terrain->getLayerBlendMapSize();
+ float* pBlend1 =
bm->getBlendPointer();
+ for (Ogre::uint16 y =
0; y != bmSize; y++)
+ {
+ for
(Ogre::uint16 x = 0; x != bmSize; x++)
+ {
+
Ogre::Real tx=(float(x)/float(bmSize));
+
Ogre::Real ty=(float(y)/float(bmSize));
+ int ix
= int(img.getWidth()*tx);
+ int iy
= int(img.getHeight()*ty);
+
Ogre::ColourValue c = img.getColourAt(ix, iy, 0);
+ float
alpha = 1;//(1/b);
+
if(blendMode[b] == "R")
+
*pBlend1++ = c.r * alpha;
+ else
if(blendMode[b] == "G")
+
*pBlend1++ = c.g * alpha;
+ else
if(blendMode[b] == "B")
+
*pBlend1++ = c.b * alpha;
+ else
if(blendMode[b] == "A")
+
*pBlend1++ = c.a * alpha;
+ }
+ }
+ bm->dirty();
+ bm->update();
+ }
}
}
- mTerrainGroup->saveAllTerrains(false);
+
+ if(disableCaching)
+ mTerrainGroup->saveAllTerrains(false);
} else
{
// paging, yeah!
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires
February 28th, so secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsight-sfd2d
_______________________________________________
Rigsofrods-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rigsofrods-devel