|
本帖最后由 tiantangtl 于 2012-10-28 17:36 编辑
想实现鼠标捕捉三维空间中xy平面上的点,想法是通过const osgGA::GUIEventAdapter获取屏幕点再做一条射线与xy面的交点,看到array的下面这段代码- osg::Vec3d rtn;
- osgManipulator::PointerInfo pi;
- pi.setNearFarPoints( osg::Vec3(0,-10000,10), osg::Vec3(0,10000,10) );
- osgManipulator::PlaneProjector* pp = new osgManipulator::PlaneProjector;
- pp->setPlane( osg::Plane(osg::Vec3(0,-1,1),osg::Vec3(0,0,0)) );
- if ( !pp->project( pi, rtn ) ) return 1;
- std::cout << "X" << rtn.x() << "Y" << rtn.y() << "Z" << rtn.z() << std::endl;
复制代码 将其中的
osg::Vec3(0,-10000,10), osg::Vec3(0,10000,10)改为osg::Vec3(x,-10000,y), osg::Vec3(x,10000,y)
osg::Vec3(0,-1,1),osg::Vec3(0,0,0)改为osg::Vec3(0,0,1),osg::Vec3(0,0,0)
为什么pp->project( pi, rtn )总是false,是不是还有哪存在问题?
另,node上原来已经有个父节点,如何在node节点上添加一个matrixtransform的父节点使其能够记录变换?看源码中addParent是保护函数。
求大神指点,感激不尽! |
|