|
|
我想让一辆车沿着固定的路线走,并且时刻面对前方。我用下面的代码可以保证在水平面上完美实现:
Vector3 mDestination = mWalkList.front();
Vector3 mDirection = mDestination - mNode->getPosition();
Vector3 src = mNode->getOrientation() * Vector3::UNIT_X;
Real mDistance = mDirection.normalise();
Quaternion quat = src.getRotationTo(mDirection);
mNode->rotate(quat);
这是Ogre中级教程一所使用的方法。
但是,如果车还要上坡下坡的话,就会出现错误。有时候车身会侧着。
因为我用了TerrainSceneManager的场景管理器,于是,我用了下面的方法:
Vector3 vecPos = mNode->getPosition();
Vector3 vecUp(0, 0, 0);
TerrainRenderable * tile = mSceneMgr->getTerrainTile(vecPos);
tile->_getNormalAt(vecPos.x, vecPos.y, &vecUp);
vecUp.normalise();
Vector3 vecRight = mDirection.crossProduct(vecUp);
vecRight.normalise();
Ogre: uaternion quat(vecRight, vecUp, mDirection);
mNode->setOrientation(quat);
这样做以后,根本不起作用,根本不影响车辆当前的方位,路线再怎么转弯,车子走过去以后,也跟max里的方位相同,不会转弯! |
|