osgUtil.PlaneIntersector
是一种实现平面取样操作以识别场景中的几何图形的OSG实用程序。
osgUtil.PlaneIntersector
使用平面取样的技术来判断场景中的几何图形是否与给定的平面相交。该类在OSG场景图的选择器机制中广泛使用。
osgUtil.PlaneIntersector
的用法如下:
osgUtil::PlaneIntersector pi(osg::Plane(0.0f, 0.0f, 1.0f), osgUtil::Intersector::ModelBound);
osgUtil::IntersectionVisitor iv(&pi);
root->accept(iv);
if (pi.containsIntersections()) {
// 与平面相交的图形被找到
osgUtil::PlaneIntersector::Intersections& intersections = pi.getIntersections();
for (osgUtil::PlaneIntersector::Intersections::iterator itr = intersections.begin();
itr != intersections.end();
++itr) {
osgUtil::Intersection intersection = *itr;
// ... 处理相交结果 ...
}
}
上面的代码创建了一个基于 osg::Plane
的 osgUtil::PlaneIntersector
对象。这个 Intersector
用于检查场景图中与实现平面相交的几何图形集合。如果在调用 accept()
后,PlaneIntersector
找到了与平面相交的图形,containsIntersections()
就会返回 true
。此时可以使用 getIntersections()
方法获取相交结果的列表,并遍历每个 Intersection
对象进行相交结果集处理。
以下构造函数可用于创建 osgUtil::PlaneIntersector
对象:
PlaneIntersector(enum CoordinateFrame cf, double x, double y, double z)
PlaneIntersector(const osg::Plane& plane, enum CoordinateFrame cf)
PlaneIntersector(double x, double y, double z, double nx, double ny, double nz, enum CoordinateFrame cf)
以下方法可用于使用 osgUtil::PlaneIntersector
进行平面取样:
void setPlane(const osg::Plane& plane)
const osg::Plane& getPlane() const
void setCoordinateFrame(enum CoordinateFrame cf)
enum CoordinateFrame getCoordinateFrame() const