查看: 1263|回复: 3

关于立体模式下聚焦点的跳跃

[复制链接]

该用户从未签到

发表于 2009-10-21 16:36:30 | 显示全部楼层 |阅读模式
AnimationPathManipulator 没有
  /** Get the FusionDistanceMode. Used by SceneView for setting up stereo convergence.*/
        virtual osgUtil::SceneView::FusionDistanceMode getFusionDistanceMode() const { return osgUtil::SceneView::USE_FUSION_DISTANCE_VALUE; }
        /** Get the FusionDistanceValue. Used by SceneView for setting up stereo convergence.*/
        virtual float getFusionDistanceValue() const { return _distance; }
这两个函数所以在做动画立体显示的时候总是不真实。
所以我试着重载了这个类,模仿TerrainManipulator写了setDistance这个方法。如下:
void setDistance()
{
osg::Vec3d lookVector(- matrix(2,0),-matrix(2,1),-matrix(2,2));
    osg::Vec3d eye(matrix(3,0),matrix(3,1),matrix(3,2));
    osg::notify(INFO)<<"eye point "<<eye<<std::endl;
    osg::notify(INFO)<<"lookVector "<<lookVector<<std::endl;
    if (!_node)
    {
        _center = eye+ lookVector;
        _distance = lookVector.length();
        _rotation = matrix.getRotate();
        return;
    }

    // need to reintersect with the terrain
    const osg::BoundingSphere& bs = _node->getBound();
    float distance = (eye-bs.center()).length() + _node->getBound().radius();
    osg::Vec3d start_segment = eye;
    osg::Vec3d end_segment = eye + lookVector*distance;
   
    osg::Vec3d ip;
    bool hitFound = false;
    if (intersect(start_segment, end_segment, ip))
    {
        notify(INFO) << "Hit terrain ok A"<< std::endl;
        _center = ip;
       _distance = (eye-ip).length();//设置距离
                    hitFound = true;
}
把这个函数放在了函数handle中的case:Frame中。
随后问题出现了,聚焦点在一个物体表面跳到另一个表面时(一个远一个近)。即distance变化很大。这样造成场景也立体效果也变化很大。请问有没有解决方案,使变化平滑一点。

该用户从未签到

发表于 2009-10-21 17:13:19 | 显示全部楼层
可以考虑通过设置_center和_rotation的值,避免_distance变化过大,不过计算起来需要您自己动手

该用户从未签到

 楼主| 发表于 2009-10-23 15:33:09 | 显示全部楼层
virtual float getFusionDistanceValue() const { return _distance; }
不是只和_distance有关吗?

该用户从未签到

发表于 2009-10-24 08:41:12 | 显示全部楼层
您的最终目的是:既要保证漫游观察的正确和流畅,又要把其中的变量值用于立体显示,如何兼顾这两点是您设计程序的任务。因此getFusionDistanceValue()返回什么内容,这是您自己决定的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表