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::ClipPlane

osg::ClipNode继承自osg::Group,功能是定义场景中裁剪面的位置。 osg::ClipPlane继承自osg::StateAttribute,定义一个裁剪面,可参考:glCl...

osg::clipNode

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

osgFX实现方式解析

简介 osgFX是一个osg的附加库,是一个用于实现可重用特殊效果的架构工具,它实现的效果可以添加到OSG的节点中。它包含了一系列预定义好的特殊效果,osg3.2中主要有如下几种: Ani...

osgclip例子

本来自演示了ClipNode。 主要的内容都在decorate_with_clip_node中。 Clip在OpenGL中是定义裁剪面,然后glEnable,设置使用裁剪,于是在OpenGL的固定...
  • yungis
  • yungis
  • 2013-01-23 07:56
  • 2224

tensorflow的examples下Udacity中Assignment 2的problem解决方案

抽空看了下udacity上的deeplearning课程,讲的不错。尝试着做里面的题目,csdn上也有很多Assignment的教程,我也把我写的添加进来,供大家参考: 一、问题重述: Probl...

Lubuntu12.04安装wxpython及examples(demo)

Lubuntu确实轻量级,快速;我个人在我的老爷机上用比XP快,和WIN7,WIN8(没用过,据说很慢)自然不比了。 先从百科里面贴点介绍: 在LXDE的基础上,有关开发团队紧紧咬住Ubuntu开...
  • borsyu
  • borsyu
  • 2012-08-23 23:16
  • 1714

解析./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt

解析./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt

Spring + JdbcTemplate + JdbcDaoSupport + HibernateDaoSupport examples

http://www.mkyong.com/spring/spring-jdbctemplate-jdbcdaosupport-examples/ http://blog.csdn.net/lin...

Machine Learning - Neural Networks Examples and Intuitions

This articles contains topics about Neural Networks examples and intuitions.

neo4j的examples之EmbeddedNeo4jWithCustomLogging.java

neo4j的examples之EmbeddedNeo4jWithCustomLogging.java源码:/* * Licensed to Neo Technology under one or m...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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