关闭

Examples osgclip注释

1957人阅读 评论(0) 收藏 举报
分类:

详细源码见osg例子 osgclip,这里只分析decorate_with_clip_node函数

  • 这一段的功能主要是绘制线型的节点
    //创建根节点
    osg::Group* rootnode = new osg::Group;

    
//创建状态集
    osg::StateSet* stateset = new osg::StateSet;

    
//设置多边形绘制方式为线型,正反面都绘制
    osg::PolygonMode* polymode = new osg::PolygonMode;
    polymode
->setMode(osg::PolygonMode::FRONT_AND_BACK,osg::PolygonMode::LINE);

    
//设置状态覆盖其子节点的状态(子节点设为保护的除外)
    stateset->setAttributeAndModes(polymode,osg::StateAttribute::OVERRIDE|osg::StateAttribute::ON);
    
    osg::Group
* wireframe_subgraph = new osg::Group;
    wireframe_subgraph
->setStateSet(stateset);
    wireframe_subgraph
->addChild(subgraph);
    rootnode
->addChild(wireframe_subgraph);
  • 这一段虽然设置了变换矩阵,变换矩阵还有孩子裁剪节点,但是裁剪节点并没有设置子节点,实际这一段什么也没有绘制。

 

    //transform围绕一轴旋转
    osg::MatrixTransform* transform= new osg::MatrixTransform;
    osg::NodeCallback
* nc = new osg::AnimationPathCallback(subgraph->getBound().center(),osg::Vec3(0.0f,0.0f,1.0f),osg::inDegrees(45.0f));
    transform
->setUpdateCallback(nc);

    
//裁剪节点和裁剪盒,盒以外的都将裁剪掉
    osg::ClipNode* clipnode = new osg::ClipNode;
    osg::BoundingSphere bs 
= subgraph->getBound();
    bs.radius()
*= 0.4f;
    osg::BoundingBox bb;
    bb.expandBy(bs);
    clipnode
->createClipBox(bb);
    clipnode
->setCullingActive(false);
    transform
->addChild(clipnode);
    rootnode
->addChild(transform);

 

    osg::Group* clipped_subgraph = new osg::Group;

    
//设置clipped_subgraph的状态为clipnode的状态,这样clipped_subgraph实际上未裁剪的六面体已经进行了旋转,也就是说这时绘制的结果应该如第一副,牛本身保持不动,而裁剪节点在动
//setStateSet()让clipped_subgraph可以被剪裁
    clipped_subgraph->setStateSet(clipnode->getStateSet());
    clipped_subgraph
->addChild(subgraph);
    rootnode
->addChild(clipped_subgraph);

想想如果没有第三段代码,而在第二段的最后加上一句

clipnode->addChild(subgraph);则回出现第二副图的情况,那就是牛被裁剪外(保留的区域)脱离了线框牛。但是如果在clipnode加入一个变换节点,但是和刚才那个是反方向的,然后在变换节点后再加入子节点subgraph,也可以实现,因为这事subgraph又被逆变换过来了,保持没动。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:273598次
    • 积分:2876
    • 等级:
    • 排名:第12392名
    • 原创:47篇
    • 转载:34篇
    • 译文:2篇
    • 评论:55条
    文章分类
    最新评论