|
我想通过如图用鼠标点击飞机节点或飞机节点上的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 编辑 ] |
-
|