boqing的专栏

知识在于积累

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
上一篇osg::BlendEquation
下一篇Examples osgclip注释
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭