查看: 1493|回复: 3

请教这段代码从鼠标单击处屏幕坐标到世界坐标转化

[复制链接]

该用户从未签到

发表于 2013-4-14 23:52:12 | 显示全部楼层 |阅读模式
//屏幕坐标
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();
                                                        }


请问是为什么呢?谢谢!

该用户从未签到

发表于 2013-4-15 07:48:41 | 显示全部楼层
最多也就有两个量是相同的,无形中您已经把Z值固定了,您都没有研究过computeIntersections 中的内容吧

该用户从未签到

 楼主| 发表于 2013-4-15 09:09:27 | 显示全部楼层
liuzhiyu123 发表于 2013-4-15 07:48
最多也就有两个量是相同的,无形中您已经把Z值固定了,您都没有研究过computeIntersections 中的内容吧

我不关心Z值,只要求x,y正确
但是现在x,y的值不对

该用户从未签到

发表于 2013-4-15 09:18:07 | 显示全部楼层
您看一下 computeIntersections 中的内容 不就知道 您的方法 和 它的方法 是哪里不同了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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