osgdepthshadow注释

原创 2007年10月16日 10:38:00

首先分析函数_create_scene(),此函数创建的图片如下:

 

下面分析这几个相互移动的物体是怎么画出来的,先不考虑纹理的问题。

代码和注释如下:

ref_ptr<Group> _create_scene()
...{
    
//要返回的scene,是一个Group类型的
    ref_ptr<Group> scene = new Group;
    
//创建叶节点并加入到scene中,它包括中间的大球和底盘
    ref_ptr<Geode> geode_1 = new Geode;
    scene
->addChild(geode_1.get());

    
//创建叶节点2,把他加入到一个变换矩阵中,变换矩阵加入到sence
    
//由后面可知,叶节点2包括一个锥体,一个圆柱体,一个小圆球
    
//(相对于中间的大圆球),一个立方体。
    ref_ptr<Geode> geode_2 = new Geode;
    ref_ptr
<MatrixTransform> transform_2 = new MatrixTransform;
    transform_2
->addChild(geode_2.get());
    
//变换矩阵设置动画,绕y轴以每秒45度角的速度旋转
    transform_2->setUpdateCallback(new osg::AnimationPathCallback(Vec3(000), Y_AXIS, inDegrees(45.0f)));
    scene
->addChild(transform_2.get());

    
//同叶节点2类似,叶节点3包括一个平板(最上方),反方向旋转
    ref_ptr<Geode> geode_3 = new Geode;
    ref_ptr
<MatrixTransform> transform_3 = new MatrixTransform;
    transform_3
->addChild(geode_3.get());
    transform_3
->setUpdateCallback(new osg::AnimationPathCallback(Vec3(000), Y_AXIS, inDegrees(-22.5f)));
    scene
->addChild(transform_3.get());

    
//这2个变量限制了图像的大小
    const float radius = 0.8f;
    
const float height = 1.0f;
    
//网格化(分格化tessellation)即把凹多边形,包含洞,岛的多边型,
    
//或者自交叉多边型划分为简单凸多边形的过程
    
//详细参考《opengl编程指南》第11章《分格化和二次方程表面》
    ref_ptr<TessellationHints> hints = new TessellationHints;
    
//设置分格化的半径,如果我们把此处设置为0.1,可看到球、锥、柱会有很明显的棱角
    hints->setDetailRatio(2.0f);
    ref_ptr
<ShapeDrawable> shape;

    shape 
= new ShapeDrawable(new Box(Vec3(0.0f-2.0f0.0f), 100.1f10), hints.get());
    shape
->setColor(Vec4(0.5f0.5f0.7f1.0f));
    geode_1
->addDrawable(shape.get());

    shape 
= new ShapeDrawable(new Sphere(Vec3(0.0f0.0f0.0f), radius * 2), hints.get());
    shape
->setColor(Vec4(0.8f0.8f0.8f1.0f));
    geode_1
->addDrawable(shape.get());

    shape 
= new ShapeDrawable(new Sphere(Vec3(-3.0f0.0f0.0f), radius), hints.get());
    shape
->setColor(Vec4(0.6f0.8f0.8f1.0f));
    geode_2
->addDrawable(shape.get());

    shape 
= new ShapeDrawable(new Box(Vec3(3.0f0.0f0.0f), 2 * radius), hints.get());
    shape
->setColor(Vec4(0.4f0.9f0.3f1.0f));
    geode_2
->addDrawable(shape.get());

    shape 
= new ShapeDrawable(new Cone(Vec3(0.0f0.0f-3.0f), radius, height), hints.get());
    shape
->setColor(Vec4(0.2f0.5f0.7f1.0f));
    geode_2
->addDrawable(shape.get());

    shape 
= new ShapeDrawable(new Cylinder(Vec3(0.0f0.0f3.0f), radius, height), hints.get());
    shape
->setColor(Vec4(1.0f0.3f0.3f1.0f));
    geode_2
->addDrawable(shape.get());

    shape 
= new ShapeDrawable(new Box(Vec3(0.0f3.0f0.0f), 20.1f2), hints.get());
    shape
->setColor(Vec4(0.8f0.8f0.4f1.0f));
    geode_3
->addDrawable(shape.get());

    ref_ptr
<Material> matirial = new Material;
    
//设置模式为散射,很大程度上决定了材质的颜色
    
// 设置材质模式,参考《opengl编程指南》的《5.6.5颜色材质模式》
    
//为了降低改变材质属性的开销,为了避免材质属性发生不必要的变化,
    
//只有指定的材质属性才发生变化
    matirial->setColorMode(Material::DIFFUSE);
    
//设置环境光
    matirial->setAmbient(Material::FRONT_AND_BACK, Vec4(0001));
    
//设置反射光
    matirial->setSpecular(Material::FRONT_AND_BACK, Vec4(1111));
    
//设置反射指数
    matirial->setShininess(Material::FRONT_AND_BACK, 64.0f);
    scene
->getOrCreateStateSet()->setAttributeAndModes(matirial.get(), StateAttribute::ON);

    
return scene;
}

注释转换<C注释-->C++注释>

# 本篇博客为简单的注释转换实现,功能为将简单的C注释段落转换为CPP注释 @ 注意: 代码中所用到的fopen,fwrite,fread等文件操作函数在通讯录文件流博客中做了介 绍:ht...
  • bitboss
  • bitboss
  • 2016年05月24日 09:36
  • 1550

Eclipse 注释模板 函数注释 类注释 文件注释 Code Template

打开Window->Preferences->Java->Code Style->Code Templates 点击"Import",导入模板codetemplates.xml文件。 codetem...
  • a1258531
  • a1258531
  • 2016年09月11日 10:11
  • 1018

注释转换 (将C注释转换为C++注释)

注释转换  注释转换 》  就是将代码中的注释转换为同一类的  , 比如是 C 语言 或者C++  C语言中  ,编译器默认的注释风格是    /*  .........*/    C++中 ...
  • WX_East
  • WX_East
  • 2016年08月11日 10:41
  • 1060

顺序表操作代码(中文注释)

  • 2018年01月12日 03:11
  • 6KB
  • 下载

栈操作代码(中文注释)

  • 2018年01月12日 03:15
  • 14KB
  • 下载

串操作代码(中文注释)

  • 2018年01月12日 03:17
  • 5KB
  • 下载

H+ 后台管理UI 最新版 V4.1.0 官方原版 完整版 带注释 未压缩 带说明版本

  • 2018年01月10日 10:59
  • 17.94MB
  • 下载

tinyxml库文件及其用例有注释

  • 2017年11月02日 17:56
  • 262KB
  • 下载

linux内核完全注释

  • 2017年11月01日 23:35
  • 7.07MB
  • 下载

C# LinqXML添加注释到XML文件

  • 2017年10月27日 11:02
  • 37KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:osgdepthshadow注释
举报原因:
原因补充:

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