做一个课程作业,用到了 pick 功能 。用来pick的类是osgUtil::LineSegmentIntersector
确定射线方向的方法,取射线上的任意两点,以这两个点做端点的向量即为这个方向向量,这个方法中,这两个点是视点(eyePoint)和射线与物体的交点。计算方法:
1.计算世界坐标系中视点的坐标:osg::Vec3d eyeInWorld = osg::Vec3d(0.0,0.0,0.0) * osg::Matrixd::inverse(camera->getViewMatrix()); 切记是逆矩阵
2.取到射线与某一物体的交点 const osg::Vec3d collisionPoint = intersection.getWorldIntersectPoint();
3.射线的方向向量 osg::Vec3d = eyeInWorld - collisionPoint ;