Examples osgclip注释

原创 2007年09月13日 17:25:00

详细源码见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又被逆变换过来了,保持没动。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

osg::clipNode

这一段的功能主要是绘制线型的节点     //创建根节点     osg::Group* rootnode = new osg::Group;     //创建状态集     osg:...
  • shui_zhi_lian
  • shui_zhi_lian
  • 2014年08月17日 17:15
  • 932

osg::ClipNode与osg::ClipPlane

osg::ClipNode继承自osg::Group,功能是定义场景中裁剪面的位置。 osg::ClipPlane继承自osg::StateAttribute,定义一个裁剪面,可参考:...
  • zhuqinglu
  • zhuqinglu
  • 2007年09月13日 16:12
  • 3468

裁剪节点ClippingNode

学习cocos2dx 3.2确实比较吃力,因为网上关于最新版的v3.2的资料十分稀少,或者是讲解的确实不是很详细。大部分人都是根据官方文档照样画瓢,而对于有些比较抽象的概念及函数都是照着官方文档来讲解...
  • u012398902
  • u012398902
  • 2015年01月13日 12:13
  • 599

OSG 自带examples简介

1.example_osganimate 一)演示了路径动画的使用(AnimationPath、AnimationPathCallback),路径动画回调可以作用在Camera、Camera...
  • hudfang
  • hudfang
  • 2015年07月06日 17:50
  • 1745

浏览OSG自带的例子

OSG开源的源码中带有很多的漂亮的例子,可以通过以下命令看到: 1.打开cmd.exe 2.进入到OpenSceneGraph-3.4.0目录下 3.运行:runexamples.bat如下图:...
  • wb175208
  • wb175208
  • 2017年07月06日 17:13
  • 240

OSG 学习第四天:光照

OSG 光照 1、osg::Light OSG将OpenGL中的glLight()作了一个light状态的类封装,用于保存灯光的模式与属性参数信息。 osg::Light...
  • MissXy_
  • MissXy_
  • 2017年08月04日 23:35
  • 299

osg与qt环境搭建+视频的讲解已经录好

我是一个比较喜欢总节的人,而且愿意把它用视频记录下来,在工作的一年多的时间里我录了有不少视频都是我自己总节并学习的视频。      比如说是c++的小游戏做的愤怒的小鸟,还有就是第一年工作人事mfc的...
  • sadasasdasd
  • sadasasdasd
  • 2015年03月24日 08:51
  • 2518

osg中拾取对象和拾取点

使用osgUtil::PolytopeIntersector来拾取对象,使用这个类可与方便与点、直线等对象进行碰撞求交计算 int COSGViewInternal:PickObject(int x,...
  • wang15061955806
  • wang15061955806
  • 2016年06月07日 16:10
  • 1353

VS2010+64+OSG3.2.1之一帮助文档的生成

最近在学习OSG,发现编译时产生的帮助文档,mo'shi
  • nuaaqsm0915
  • nuaaqsm0915
  • 2014年06月24日 21:13
  • 2457

opengl及osg中的几种渲染方法

glDrawArrays 和 glDrawElements 的作用都是从一个数据数组中提取数据渲染基本图元。( render primitives from array data ) 注!如...
  • u012463389
  • u012463389
  • 2016年05月23日 23:09
  • 1983
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Examples osgclip注释
举报原因:
原因补充:

(最多只允许输入30个字)