|
//屏幕坐标
osg::Vec3f vec = osg::Vec3f(ea.getX(), ea.getY(), 0.0f);
//先求出世界坐标
osg::Matrixd masterCameraVPW = viewer->getCamera()->getViewMatrix()
* viewer->getCamera()->getProjectionMatrix();
if(viewer->getCamera()->getViewport())
{
osg::Viewport* viewport = viewer->getCamera()->getViewport();
masterCameraVPW *= viewport->computeWindowMatrix();
}
osg::Matrixd mtxInverseMVPW = osg::Matrix::inverse(masterCameraVPW);
osg::Vec3f vec = osg::Vec3f(x_pick,y_pick,0.0f);
//得到世界坐标
vec = vec * mtxInverseMVPW;
*/
此次vec的坐标应该是世界坐标了吧,跟用求交器算出来的不一样
下面是能得到正确结果的代码
osgUtil::LineSegmentIntersector::Intersections intersections; //创建一个线段交集检测对象
if(viewer->computeIntersections(x_pick,y_pick,intersections))
{
//for(osgUtil::LineSegmentIntersector::Intersections::iterator hitr = intersections.begin();
// hitr != intersections.end();
// ++hitr)
//{
osgUtil::LineSegmentIntersector::Intersections::iterator hitr = intersections.begin();
vec = hitr->getWorldIntersectPoint();
}
请问是为什么呢?谢谢! |
|