ahmedali
02-11-2008 08:41:42
may be useful for someone. My ETM terrain corner starts at the Origin and terrain is not centered aligned.
void comGameWorld::rebuildTerrainCollisionShape()
{
if (mTerrainActor)
{
mNxScene->destroyActor(mTerrainActor->getName());
mTerrainActor = 0;
}
std::size_t rows, cols;
rows = mTerrainMgr->getTerrainInfo().getWidth();
cols = mTerrainMgr->getTerrainInfo().getHeight();
//Start the heighfield creation by initializing the manual heightfield
NxOgre::Resources::ManualHeightfield* mhf = new NxOgre::Resources::ManualHeightfield();
// mhf->setTesselation(NxOgre::Resources::ManualHeightfield::TT_TopLeft_to_BottomRight);
mhf->setTesselation(NxOgre::Resources::ManualHeightfield::TT_TopRight_to_BottomLeft);
mhf->begin(cols, rows);
short maxShort = 32767;
//Add each data point to the heightfield (row major order)
for(size_t i = 0; i < rows; ++i)
for(size_t j = 0; j < cols; ++j)
{
NxMaterialIndex matInd = 0;
short datum = short( maxShort * mTerrainMgr->getTerrainInfo().at(i,j) );
//Add sample to heightfield
mhf->sample(datum, matInd);
}
//Set how far down the bottom of the heighfield extends
mhf->setThickness(-100);
NxOgre::Resources::Heightfield* hf = mhf->end(true);
//Calculate size of the terrain
Vector3 extents_size = mTerrainMgr->getTerrainInfo().getExtents().getSize();
//Set up the terrain parameters
NxOgre::TerrainParams tparams;
tparams.mCentering = NxOgre::TerrainParams::TC_None;
//tparams.mHoleMaterial = 65535;
tparams.mHoleMaterial = 3500;
tparams.mFlags.mVisualiseTerrain = true;
//Create the terrain
NxOgre::Terrain* terrain = new NxOgre::Terrain(hf, NxOgre::float3(extents_size.x,extents_size.y,extents_size.z), "", tparams);
mTerrainActor = mNxScene->createActor("terrain_actor", terrain, Ogre::Vector3(0,0,0), "static: yes");
}