查看: 1343|回复: 1

关于导航小地图的补充问题

[复制链接]

该用户从未签到

发表于 2011-11-21 16:38:59 | 显示全部楼层 |阅读模式
本帖最后由 tujie2652324 于 2011-11-21 16:42 编辑

就是现在导航器做出来了,我想在导航地图上用文字标记一些地方,这个能实现吗?求教各位了。。。

这个导航是根据FreeSouth的视频教程里面那样创建一个主相机和一个烘焙相机实现的。


另外一个就是碰撞检测和上楼梯算法的结合问题。。。

   osg::Vec3 newpos = m_vPosition + delta;
        osg::Vec3d start = osg::Vec3d(newpos.x(),newpos.y(),newpos.z()+8);
        osg::Vec3d  end  = osg::Vec3d(newpos.x(),newpos.y(),newpos.z()-1000);

        osg::Vec3d start2 = osg::Vec3d(m_vPosition.x(),m_vPosition.y(),m_vPosition.z());
        osg::Vec3d  end2  = osg::Vec3d(newpos.x(),newpos.y(),newpos.z());

    osgUtil:ineSegmentIntersector::Intersections intersections;
        osg::ref_ptr<osgUtil::LineSegmentIntersector> ls = new osgUtil::LineSegmentIntersector(start,end);
        osg::ref_ptr<osgUtil::LineSegmentIntersector> ls2 = new osgUtil::LineSegmentIntersector(start2,end2);
       
        osg::ref_ptr<osgUtil::IntersectionVisitor> iv = new osgUtil::IntersectionVisitor;
   
        osg::ref_ptr<osgUtil::IntersectorGroup> lg = new osgUtil::IntersectorGroup;
   
        //osg::LineSegment::Intersections intersections;
        long height = 0;

        lg->addIntersector(ls.get());
        lg->addIntersector(ls2.get());

        iv->setIntersector(lg.get());
        m_node->accept(*(iv.get()));


        if (!ls2->containsIntersections())
        {
               
                //取出交点
                intersections = ls->getIntersections();
                osgUtil::LineSegmentIntersector::Intersections::iterator iter = intersections.begin();
                height = iter->getWorldIntersectPoint().z();
                for (; iter != intersections.end();iter++)
                {
                        if (height < iter->getWorldIntersectPoint().z())
                        {
                                height = iter->getWorldIntersectPoint().z();
                                     }
                       
                }
        }
        else
        {
                return;
        }

        m_vPosition += delta;
        m_vPosition.set(osg::Vec3d(m_vPosition.x(),m_vPosition.y(),height+1));


这样写可以实现么?有没有更好的实现方法???

该用户从未签到

发表于 2011-11-23 10:58:10 | 显示全部楼层
我不知道该怎么回答您的问题,任何代码都是可以实现某些功能的。当您觉得有不足的时候,可以在自己的基础上加以完善,频繁重构并不是一个好的选择
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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