osg::ClipNode与osg::ClipPlane

  • osg::ClipNode继承自osg::Group,功能是定义场景中裁剪面的位置。
  • osg::ClipPlane继承自osg::StateAttribute,定义一个裁剪面,可参考:glClipPlane().
  • 先看一下osg::ClipPlane的构造函数:

ClipPlane (unsigned  int  no,  const  Vec4d  & plane) 
ClipPlane (unsigned 
int  no,  const  Plane  & plane) 
ClipPlane (unsigned 
int  no,  double  a,  double  b,  double  c,  double  d) 

 

后四个参数其实构建了一个平面方程:

aX+bY+cZ+d=0

第一个参数指定定义哪个裁剪面,至少支持6个。

定义多个裁剪面时可调用

setClipPlaneNum 和setClipPlane 函数
  • osg::ClipNode的使用
    // 创建节点    
    osg::ClipNode *  clipped_subgraph  =   new  osg::ClipNode;
    // 得到subgraph节点的包围球
    osg::BoundingSphere bs  =  subgraph -> getBound();
    bs.radius()
    *=   0.4f ;
    // 根据包围球创建一个6面体,刚好包住球体
    osg::BoundingBox bb;
    bb.expandBy(bs);
    clipped_subgraph
    -> createClipBox(bb);
    // 添加子节点
    clipped_subgraph -> addChild(subgraph);

你可能感兴趣的:(c)