• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
lizhengjin
博客园    首页    新随笔    联系   管理    订阅  订阅
得到相交的三角面片的三个顶点坐标

class PickEvent : public osgGA::GUIEventHandler
{
public:
 PickEvent(osg::Geometry* drawable) : _drawable(drawable){}
 ~PickEvent(){}
public:
 bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
 {
  if (ea.getEventType() == osgGA::GUIEventAdapter::PUSH)
  {
     osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
      double x = ea.getX();
      double y = ea.getY();

   osgUtil::LineSegmentIntersector* picker = new osgUtil::LineSegmentIntersector(osgUtil::Intersector::WINDOW, x,y);
   osg::Camera* camera = viewer->getCamera();
   osgUtil::IntersectionVisitor visitor(picker);
   camera->accept(visitor);
   if (picker->containsIntersections())
   {
    osgUtil::LineSegmentIntersector::Intersections::iterator it = picker->getIntersections().begin();
    osg::Geometry* geometry = (*it).drawable->asGeometry();
    osg::Vec3Array* vertes = dynamic_cast<osg::Vec3Array*>( geometry->getVertexArray() );
    osg::Vec3* first = &(vertes->front());
    int i = (*it).indexList[0];
    int j = (*it).indexList[1];
    int k = (*it).indexList[2];

    osg::Vec3 test1 = *(first+i);
    osg::Vec3 test2 = *(first+j);
    osg::Vec3 test3 = *(first+k);
    }
   
   

  }
  return false;
  
 }
public:
 osg::Transform* _transform;
 osg::Geometry* _drawable;

};

posted on 2010-07-28 22:18  lizhengjin  阅读(601)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3