查看: 1264|回复: 7

求离原点最近的交点坐标

[复制链接]

该用户从未签到

发表于 2014-5-15 16:36:37 | 显示全部楼层 |阅读模式
定义一条线段与场景相交,代码如下:
osgUtil:ineSegmentIntersector intersector= osgUtil::LineSegmentIntersector(start,end);
osgUtil::IntersectionVisitor intersectVisitor( intersector.get());
scene->accept(intersectVisitor);
intersector->getFirstIntersection();

这样求得的交点是线段与模型的第一个交点,请问大家有没有函数可以获得离屏幕最近的点的坐标(即离相机坐标系原点最近的坐标)?

该用户从未签到

发表于 2014-5-15 19:33:35 | 显示全部楼层
按你的问法 近裁剪面上的点肯定最近。

该用户从未签到

 楼主| 发表于 2014-5-15 23:05:27 | 显示全部楼层
cenfer 发表于 2014-5-15 19:33
按你的问法 近裁剪面上的点肯定最近。

不太理解您说的,能再解释一下吗?
我想求的是距离屏幕最近的点,我觉得应该就是离相机最近的点吧。

该用户从未签到

发表于 2014-5-16 22:41:48 | 显示全部楼层
2楼的回答应该是最准确的

该用户从未签到

 楼主| 发表于 2014-5-19 15:28:23 | 显示全部楼层
array 发表于 2014-5-16 22:41
2楼的回答应该是最准确的

但是与线段相交的是一个3D模型,所以交点不一定在近裁剪面上吧。

该用户从未签到

发表于 2014-5-23 11:11:03 | 显示全部楼层
您之前询问的时候,说的是“获得离屏幕最近的点的坐标”,并没有说是交点。如果要交点的话,实际上FirstIntersection就是最近的交点了,Intersector返回的结果是自动排序过的

该用户从未签到

 楼主| 发表于 2014-6-3 17:16:00 | 显示全部楼层
array 发表于 2014-5-23 11:11
您之前询问的时候,说的是“获得离屏幕最近的点的坐标”,并没有说是交点。如果要交点的话,实际上FirstInt ...

谢谢array的回答, 还是不太明白。例如我定义:

osg::Vec3d start = osg::Vec3d(0, 0, 0);
osg::Vec3d end = osg::Vec3d(1000 , 1000, 1000);

然后求与3D模型的交点:

osg::ref_ptr< osgUtil:ineSegmentIntersector> intersector =new osgUtil::LineSegmentIntersector(start,end);
osgUtil::IntersectionVisitor intersectVisitor(intersector.get());
Node->accept(intersectVisitor);
osgUtil::LineSegmentIntersector::Intersection inter = intersector->getFirstIntersection();
osg::Vec3 temp1 = inter.getLocalIntersectPoint();
osg::Vec3 temp2 = inter.getWorldIntersectPoint();

这样得出的交点的坐标值(temp1 和 temp2)和我预期的不同。(我定义了从原点出发的不同方向的射线,并求与3d模型的交点,但是所有交点的坐标值都在很小的一个范围内(-2,-2,-2.3)——(2,2,2.3))

不知道是不是我求交点的方法有问题呢?
                       

该用户从未签到

发表于 2014-6-25 16:49:49 | 显示全部楼层
注意worldIntersectPoint得到的结果是node坐标系下的,而localIntersectPoint是Drawable所在的坐标系下的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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