与地形的交叉点

时间:2014-07-19 16:43:25

标签: c++ ogre

我试图用一些Ogre :: Ray实现一个碰撞系统,但似乎它不起作用......

这是代码:

Ogre::Vector3 robotPos = mRobotNode->getPosition();
Ogre::Ray robotRay(Ogre::Vector3(robotPos.x,5000.0f,robotPos.z),Ogre::Vector3::NEGATIVE_UNIT_Y);

mRaySceneQuery->setRay(robotRay);
mRaySceneQuery->setSortByDistance(false);

Ogre::RaySceneQueryResult &result = mRaySceneQuery->execute();
Ogre::RaySceneQueryResult::iterator itr;

for(itr = result.begin();itr != result.end(); itr++)
{
    if(itr->worldFragment)
    {

        Ogre::Real terrainHeight = itr->worldFragment->singleIntersection.y;
        if(terrainHeight!=robotPos.y)
        {
            mRobotNode->setPosition(Ogre::Vector3(robotPos.x,terrainHeight,robotPos.z));
            mCameraNode->setPosition(Ogre::Vector3(robotPos.x,terrainHeight,robotPos.z));
            break;
        }
    }
}

此代码放入函数:framerenderingqueued:)

但我的网格仍然低于地形

有人可以帮帮我吗? :)谢谢

1 个答案:

答案 0 :(得分:0)

为什么不进一步使用调试器?您可以在“if(terrainHeight!= robotPos.y)”条件中意识到这个问题,或者您的“结果”变量内部可能没有元素,或者结果元素中没有一个具有正“worldFragment”字段。
如果您提供有关运行时发生的更多信息,则可以帮助您识别问题。