zoukankan      html  css  js  c++  java
  • OSG学习:使用OSG中预定义的几何体

    常用的内嵌几何体包括:

    osg::Box                    //正方体
    osg::Capsule                //太空舱
    osg::Cone                   //椎体
    osg::Cylinder               //柱体
    osg::HeightField            //高度图
    osg::InfinitePlane          //无限平面
    osg::Sphere                 //球体
    osg::TriangleMesh           //三角片

    以下是代码示例:

    /**********************************************************
    *Write by FlySky
    *zzuxp@163.com  http://www.OsgChina.org   
    **********************************************************/
    
    #include <osgViewer/Viewer>
    
    #include <osg/Node>
    #include <osg/Geode>
    #include <osg/Group>
    #include <osg/ShapeDrawable>
    
    #include <osgDB/ReadFile>
    #include <osgDB/WriteFile>
    
    #include <osgUtil/Optimizer>
    
    //绘制多个预定义的几何体
    osg::ref_ptr<osg::Geode> createShape()
    {
        //创建一个叶节点
        osg::ref_ptr<osg::Geode> geode = new osg::Geode();
    
        //设置半径和高度
        float radius = 0.8f;
        float height = 1.0f;
    
        //创建精细度对象,精细度越高,细分就越多
        osg::ref_ptr<osg::TessellationHints> hints = new osg::TessellationHints;
        //设置精细度为0.5f
        hints->setDetailRatio(0.5f);
    
        //添加一个球体,第一个参数是预定义几何体对象,第二个是精细度,默认为0
        geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0.0f,0.0f,0.0f),radius),hints.get()));
        //添加一个正方体
        geode->addDrawable(new osg::ShapeDrawable(new osg::Box(osg::Vec3(2.0f,0.0f,0.0f),2*radius),hints.get()));
        //添加一个圆锥
        geode->addDrawable(new osg::ShapeDrawable(new osg::Cone(osg::Vec3(4.0f,0.0f,0.0f),radius,height),hints.get()));
        //添加一个圆柱体
        geode->addDrawable(new osg::ShapeDrawable(new osg::Cylinder(osg::Vec3(6.0f,0.0f,0.0f),radius,height),hints.get()));
        //添加一个太空舱
        geode->addDrawable(new osg::ShapeDrawable(new osg::Capsule(osg::Vec3(8.0f,0.0f,0.0f),radius,height),hints.get()));
    
        return geode.get() ;
    }
    
    int main()
    {
        //创建Viewer对象,场景浏览器
        osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
    
        osg::ref_ptr<osg::Group> root = new osg::Group();
    
        //添加到场景
        root->addChild(createShape());
    
        //优化场景数据
        osgUtil::Optimizer optimizer ;
        optimizer.optimize(root.get()) ;
    
        viewer->setSceneData(root.get());
    
        viewer->realize();
    
        viewer->run();
    
        return 0 ;
    }

    结果图:
    几何体

  • 相关阅读:
    zcu106 sd卡mount错误
    petalinux如何保留u-boot和kernel源码
    mali开发板
    v550 bare-metal 裸机 结构
    make打印隐含变量和隐含规则
    麒麟加速器
    petalinux定制rootfs 加入iperf memtester ethtool
    kafka分区选主机制
    java8 String intern()
    Storm之配置文件
  • 原文地址:https://www.cnblogs.com/huahai/p/7270927.html
Copyright © 2011-2022 走看看