|
发表于 2008-3-21 10:52:09
|
显示全部楼层
原帖由 feiyanddy 于 2008-3-21 10:33 发表
需要得到屏幕上某一点对应的空间坐标,请问怎么来实现,能否讲一下思路,谢谢 :)
屏幕上的某个点要转换到三维空间,在OpenGL中往往使用glUnProject函数;而在OSG中可以使用osgManipulator:: Projector及其派生类。即,将屏幕坐标投影到空间的某个线段,平面,圆柱面或者球面上。
转载自己发过的一个帖子~~
当我们用鼠标点击窗口的某一处时,它会在三维空间的近平面和远平面上各产生一个点。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;
复制代码 |
|