|
发表于 2008-3-19 15:57:42
|
显示全部楼层
原帖由 hzliang 于 2008-3-19 14:20 发表
有没有人用过 osgManipulator:laneProjector 中的 project() 函数,能不能解释一下,这里的投影函数主要是
用来实现什么功能的?? 谢了!
当我们用鼠标点击窗口的某一处时,它会在三维空间的近平面和远平面上各产生一个点。PlaneProjector类的作用就是计算这两个点连线与指定平面的交点坐标,也可以理解为:屏幕坐标投射在三维空间某个指定平面上的世界坐标。例如,下面的代码可以计算出屏幕坐标(0,10)在平面y=z上的世界坐标。(近/远平面是我随意指定的)- osg::Vec3 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;
复制代码
[ 本帖最后由 array 于 2008-3-19 15:59 编辑 ] |
|