本例子主要是讲解在osg中怎么使用线相交(LineSegmentIntersector),来计算与地形等具有lod以及pagelod功能节点的交点。对于普通节点的相交计算使用LineSegmentIntersector就可以得到所有的交点信息,但是对于具有lod功能的节点普通的线相交计算只能计算到与当前lod等级的节点的交点信息,更高lod等级的更加精确的交点信息是得不到的。Osg为了提供类似的功能,在osgSim中定义了几种特殊的相交计算lightOfSight、HeightAboveTerrain、ElevationSlice。这三种特效类怎么去计算与更高lod等级节点的交点信息呢,我们需要深入到对应类的源码中进行探究。
osgintersection.exe 的运行效果就是在场景中绘制一系列的相交线,与输入节点做相交计算,输出所有的交点信息和计算时间。
使用方法
osgintersection.exe cow.osg
这里应该把cow.osg替换成一个terrain的模型。
重点理解内容
1、DatabaseCacheReadCallback类
在osgSim中定义的三种特殊的相交计算类(lightOfSight、HeightAboveTerrain、ElevationSlice)都需要传递一个回调类---DatabaseCacheReadCallback。它继承自ReadCallback,在相交计算的时候,遇到的节点类型为PageLOD,此时如果当前PageLOD不是精度最高的节点,这样计算的结果就不是最精