查看: 1595|回复: 7

Geometry 设置PrimitiveSet::POINTS 再利用 intersection 求交无效?

[复制链接]

该用户从未签到

发表于 2013-5-30 21:22:48 | 显示全部楼层 |阅读模式
最近 小弟要实现一个点选 三维点 的操作~就是单击点能够变色 这样的功能我是这样实现的
用一个 deode 来 adddrawable ( pointsGemo)
  • pointsGeom->addPrimitiveSet(new osg:rawArrays(osg:rimitiveSet::POINTS,0,v->size()));
  • pointsDraw->addDrawable( pointsGeom );
  • osg::StateSet* sset = pointsDraw->getOrCreateStateSet();
  • sset->setMode( GL_LIGHTING, osg::StateAttribute::OFF );
  • osg::Point* p = new osg::Point;
  •        
  • p->setSize(15);
  • sset->setAttribute( p );
  • root->addChild(pointsDraw);


    再利用
            for (osgUtil:ineSegmentIntersector::Intersections::iterator iter = intersections.begin();
                            iter != intersections.end(); ++iter)
                    {
                            if (  !(iter->nodePath.empty())/* && ! (iter->nodePath.back()->getName().empty())*/)
                            {
                                    const osg::NodePath& np = iter->nodePath;
                                    for (int i = np.size()-1;i>=0;--i)
                                    {
                                            osg::Geode* nd = dynamic_cast<osg::Geode*>(np);
                                            if ( nd )
                                            {       
                                                   
                                                    if( nd->getDrawable(0)->getName() == "poLINintsGemo" )
    进行求交,但是实践得出 POINTS LINES等方法是无法通过求交计算的,只有osg::PrimitiveSet:UADS才可以
    除了 每个点都设置为一个Gemoetry对象外~还有什么别的好方法吗?谢谢各位关心了
  • 该用户从未签到

    发表于 2013-5-31 07:54:47 | 显示全部楼层
    本帖最后由 liuzhiyu123 于 2013-5-31 07:54 编辑

    这个很早就有人提出来了 自己从写一个 LineSegmentIntersector
    重点判断是这个函数 virtual void intersect(osgUtil::IntersectionVisitor& iv, osg::Drawable* drawable);
    在这里获得点信息 然后 判断是不是在测试线上

    该用户从未签到

     楼主| 发表于 2013-5-31 09:48:18 | 显示全部楼层
    真心感谢~就是void intersect(osgUtil::IntersectionVisitor& iv, osg:rawable* drawable);这段代码
    里应该修改哪里啊?
    是     drawable->accept(ti); 给LineSegmentIntersectorUtils::TriangleIntersector赋值之后吗? 这代码真心看不懂~麻烦了

    该用户从未签到

    发表于 2013-5-31 10:40:09 | 显示全部楼层
    跟本不需要看它的实现 直接获得drawable中的 vector信息 直接 判断是不是在线上

    该用户从未签到

     楼主| 发表于 2013-6-2 14:42:57 | 显示全部楼层
    sorry~还得麻烦你下~我最后投影到屏幕坐标还是能够点选点的
    但是您的方法我一直没看懂~就是view->computeIntersections( x, y, intersections);
    是在x,y,处打射线~但是这条射线是在哪里生成的啊~或者说~射线它是一个类?它的名字叫啥啊

    真心感谢

    该用户从未签到

    发表于 2013-6-3 08:34:38 | 显示全部楼层
    view->computeIntersections( x, y, intersections) 源码中不是已经写得很清楚了么?  有源代码 自己研究

    该用户从未签到

    发表于 2013-6-3 22:49:55 | 显示全部楼层
    cookbook第10章有相关的案例讲解

    该用户从未签到

    发表于 2013-6-7 19:29:07 | 显示全部楼层
    其实线和点可以用多面体求交器来实现的
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

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

    联系我们

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