与地形相交

Intersection with terrain

本文关键字:      更新时间:2023-10-16

我尝试用一些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;
        }
    }
}

这段代码放入了函数:frameenderingqueued:)

但我的网格保持在地形下方

有人能帮帮我吗?:)谢谢

为什么不使用调试器更深入一些呢?你可以意识到,这个问题在你的"if(terrainHeight!= robotpost .y)"条件下,或者你的"结果"变量里面有零元素,或者也许没有一个结果元素有积极的"worldFragment"字段。
如果您提供更多关于运行时发生的事情的信息,将有助于识别问题。

相关文章:
  • 没有找到相关文章