2012-09-19 45 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