2012-09-19 44 views
0

我想通过(主要是)使用演示代码加载OgreBullet中的HeightmapTerrainShape,但我的地形网格与HeightmapTerrainShape偏移。我不知道为什么会发生这种情况。这是我的代码:OgreBullet不正确的HeightmapCollisionShape形状比例?

void TerrainLoader::setTerrainPhysics(Ogre::Image *imgPtr) 

{ 
    unsigned page_size = terrainGroup->getTerrainSize(); 
    Ogre::Vector3 terrainScale(4096/(page_size-1), 600, 4096/(page_size-1)); 
    float *heights = new float[page_size*page_size]; 
    for(unsigned y = 0; y < page_size; ++y) 
    { 
     for(unsigned x = 0; x < page_size; ++x) 
     { 
      Ogre::ColourValue color = imgPtr->getColourAt(x, y, 0); 
      heights[x + y * page_size] = color.r; 
     } 
    } 

OgreBulletCollisions::HeightmapCollisionShape *terrainShape = new OgreBulletCollisions::HeightmapCollisionShape(
    page_size, 
    page_size, 
    terrainScale, 
    heights, 
    true 
); 
OgreBulletDynamics::RigidBody *terrainBody = new OgreBulletDynamics::RigidBody(
    "Terrain", 
    OgreInit::level->physicsManager->getWorld() 
); 
imgPtr = NULL; 

Ogre::Vector3 terrainShiftPos(terrainScale.x/(page_size-1), 0, terrainScale.z/(page_size-1)); 
terrainShiftPos.y = terrainScale.y/2 * terrainScale.y; 

Ogre::SceneNode *pTerrainNode = OgreInit::sceneManager->getRootSceneNode()->createChildSceneNode(); 
terrainBody->setStaticShape(pTerrainNode, terrainShape, 0.0f, 0.8f, terrainShiftPos); 
//terrainBody->setPosition(terrainBody->getWorldPosition()-Ogre::Vector3(0.005, 0, 0.005)); 
OgreInit::level->physicsManager->addBody(terrainBody); 
OgreInit::level->physicsManager->addShape(terrainShape); 
} 

这是它看起来像调试抽屉打开: enter image description here enter image description here enter image description here

我的世界4096 * 600 * 4096的尺寸,并且每个块是64 * 600 * 64

回答

1
heights[x + y * page_size] = color.r; 

此行为您提供负值。如果将负地形高度值与食人魔子弹地形组合在一起,则会出现错误的边框对话。

您需要使用间隔0-1作为高度值。

曾与柏林噪声过滤器,让您从-1值设置为1

+0

你介意张贴你的意思完全是一个小片段同样的问题?我仍然困惑:( – Nik