我用NodeTrackerManipulator可以让视点跟踪一架飞行的飞机,但默认的视角(也就是按空格键时)不是以飞机为中心,而是有偏差,这给我自己定义自由视角带来了麻烦。
如图1,飞机已经停在半空中,但追踪节点的默认视角却不是以飞机为中心,图2是运动中的飞机。
NodeTrackerManipulator的computeHomePosition()方法是用来计算默认视点,源代码如下
void NodeTrackerManipulator::computeHomePosition()
{
osg::Node* node = _trackNodePath.empty() ? getNode() : _trackNodePath.back().get();
if(node)
{
const osg::BoundingSphere& boundingSphere=node->getBound();
osg::Vec3 bc;
bc.set(boundingSphere._center);
setHomePosition(bc+osg::Vec3( 0.0,-3.5f * boundingSphere._radius,0.0f),
bc,
osg::Vec3(0.0f,0.0f,1.0f),
_autoComputeHomePosition);
}
}
不知其中setHomePosition函数接受的几个参数如何解释,谢谢
[ 本帖最后由 口口广大 于 2009-3-22 16:44 编辑 ] |