查看: 2110|回复: 1

怎样在屏幕上选取osgText对象

[复制链接]

该用户从未签到

发表于 2009-2-12 20:07:55 | 显示全部楼层 |阅读模式
我想通过如图用鼠标点击飞机节点或飞机节点上的OSGText对象以拾取该飞机节点。我下面的代码只能拾取飞机节点,请问如何能用鼠标点选到飞机上那么大块的osgText信息?

protected:
void pickVehicle(osgViewer::Viewer* viewer, const osgGA::GUIEventAdapter& ea)
{
if (!m_MainCamera){
        osgUtil:ineSegmentIntersector::Intersections intersections;

        if (m_Viewer->computeIntersections(ea.getX(), ea.getY(), intersections))
        {
                for(osgUtil::LineSegmentIntersector::Intersections::iterator hitr = intersections.begin();
                        hitr != intersections.end();
                        ++hitr)
                {
                        if (!hitr->nodePath.empty() && !(hitr->nodePath.back()->getName().empty()))
                        {         
                                osg::NodePath& np = hitr ->nodePath ;

                                for (int i=np.size()-1; i>=0; --i)
                                {
                                
                                        //拾取Geode节点   
                                         m_TextGeode = dynamic_cast<osg::Geode*> (np[np.size()-1]);
                                        if (m_TextGeode)
                                        {
                                              for(unsigned int i=0; i<m_TextGeode->getNumDrawables(); ++i)
                                        {
                                              //得到Geode下的osgText对象
                                               m_UpdateText = dynamic_cast<osgText::Text*> (m_TextGeode->getDrawable(i));

                                                if (m_UpdateText)                                                
                                                {                  
                                                         //设置跟踪节点                                                                                                  
                                                        m_tm->setTrackNode(m_TextGeode);

                                                       //设置HUD显示osggText的信息                                                                                                
                                                        m_HUD->setHUD(m_UpdateText);

                                                                        }

                                                                }

                                                        }
                                                        else
                                                        {
                                                               
                                                        }
                                                }
                                        }

                                }

                        }

                }

[ 本帖最后由 口口广大 于 2009-2-12 20:10 编辑 ]
新建 BMP 图像.JPG

该用户从未签到

发表于 2009-2-12 21:07:34 | 显示全部楼层
用LineSegmentIntersector恐怕不能判断文字,因为文字不是几何对象。建议自己建立一个文字对象包围盒的索引,然后根据空间坐标点选择对象。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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