osgSim.AzimElevationSector类表示了一个方位-仰角切片,用于在场景中渲染具有方向、高度和距离的对象。
继承自osg::Referenced类。
AzimElevationSector(unsigned int numSegmentsAzim=1, unsigned int numSegmentsElev=1)
参数:
void setAzimuthStart(double angle);
设置方位角的起始角度。参数angle的单位为角度。
void setAzimuthEnd(double angle);
设置方位角的结束角度。参数angle的单位为角度。
void setElevationStart(double angle);
设置仰角的起始角度。参数angle的单位为角度。
void setElevationEnd(double angle);
设置仰角的结束角度。参数angle的单位为角度。
void setShape(osg::Shape* shape);
设置切片的形状,通常为osg::Box或osg::Sphere。
void setUseDegreeUnits(bool useDegree);
设置角度单位是否为度,缺省为弧度。
void setAutoAdjust(bool autoAdjust);
设置是否自动调整切片大小,使得上侧和下侧分别恰好包裹的住所在的物体。缺省为false。
void setMinimumRadius(double radius);
设置物体最小包裹半径。如果autoAdjust为true,则当形状的半径小于此值时,自动调整大小。缺省为0.0。
void setMaximumRadius(double radius);
设置物体最大包裹半径。如果autoAdjust为true,则当形状的半径大于此值时,自动调整大小。缺省为无穷大。
void setMinimumDistance(double distance);
设置切片之间的最小距离。如果两个切片之间的距离小于此值,会自动调整其位置。缺省为0.1。
void setRotationOrder(osg::Quat::value_type order);
设置旋转顺序,缺省为osg::Quat::XZY。
bool getUseDegreeUnits() const;
获取当前角度单位是否为度。
bool getAutoAdjust() const;
获取当前是否自动调整切片大小。
osg::RefMatrixd* getMatrix(unsigned int azimIndex, unsigned int elevIndex);
获取指定切片的变换矩阵。azimIndex和elevIndex分别为方位角和仰角的索引编号。
osgSim::AzimElevationSector* azimElevSector = new osgSim::AzimElevationSector(5, 5); // 划分为5*5块
azimElevSector->setAzimuthStart(0.0);
azimElevSector->setAzimuthEnd(180.0);
azimElevSector->setElevationStart(-30.0);
azimElevSector->setElevationEnd(30.0);
azimElevSector->setShape(new osg::Box(osg::Vec3(0, 0, 0), 10.0)); // 切片为一个10.0*10.0*10.0的正方体
azimElevSector->setAutoAdjust(true); // 自动调整切片大小,以包裹物体
azimElevSector->setMinimumRadius(5.0); // 切片最小包裹半径为5.0
azimElevSector->setMaximumRadius(50.0); // 切片最大包裹半径为50.0
azimElevSector->setMinimumDistance(1.0); // 相邻切片之间最小距离为1.0
以上代码划分为5*5块的切片,从方位角0度到180度,从仰角-30度到30度,形状为一个10x10x10的正方体,并自动调整大小,使得上下包裹物体,不能相交。如果形状的包裹半径小于5.0,会自动调整大小,直到其包裹半径为5.0。如果形状的包裹半径大于50.0,也会自动调整大小。此外,相邻切片之间不能太近,最小距离为1.0。