zoukankan      html  css  js  c++  java
  • OSG绘制几何图形

    在OSGMFC程序基础上修改OSG_MFC类的方法,如下:

     1 void cOSG::InitSceneGraph(void)
     2 {
     3     // Init the main Root Node/Group
     4     mRoot  = new osg::Group;
     5 
     6     //// Load the Model from the model name
     7     //mModel = osgDB::readNodeFile(m_ModelName);
     8     //if (!mModel) return;
     9 
    10     // Optimize the model
    11     //osgUtil::Optimizer optimizer;
    12     //optimizer.optimize(mModel.get());
    13     //optimizer.reset();
    14 
    15     //// Add the model to the scene
    16     //mRoot->addChild(mModel.get());
    17 
    18 
    19     osg::Geode* pyramidGeode = new osg::Geode();
    20     osg::Geometry* pyramidGeometry = new osg::Geometry();
    21     pyramidGeode->addDrawable(pyramidGeometry); 
    22     mRoot->addChild(pyramidGeode);
    23 
    24     osg::Vec3Array* pyramidVertices = new osg::Vec3Array;
    25     pyramidVertices->push_back( osg::Vec3( 0, 0, 0) ); // front left
    26     pyramidVertices->push_back( osg::Vec3(10, 0, 0) ); // front right
    27     pyramidVertices->push_back( osg::Vec3(10,10, 0) ); // back right 
    28     pyramidVertices->push_back( osg::Vec3( 0,10, 0) ); // back left 
    29     pyramidVertices->push_back( osg::Vec3( 5, 5,10) ); // peak
    30 
    31     pyramidGeometry->setVertexArray( pyramidVertices ); 
    32 
    33     osg::DrawElementsUInt* pyramidBase = new osg::DrawElementsUInt(osg::PrimitiveSet::QUADS, 0);
    34     pyramidBase->push_back(3);
    35     pyramidBase->push_back(2);
    36     pyramidBase->push_back(1);
    37     pyramidBase->push_back(0);
    38     pyramidGeometry->addPrimitiveSet(pyramidBase); 
    39 
    40     osg::DrawElementsUInt* pyramidFaceOne = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
    41     pyramidFaceOne->push_back(0);
    42     pyramidFaceOne->push_back(1);
    43     pyramidFaceOne->push_back(4);
    44     pyramidGeometry->addPrimitiveSet(pyramidFaceOne);
    45 
    46     osg::DrawElementsUInt* pyramidFaceTwo = 
    47       new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
    48     pyramidFaceTwo->push_back(1);
    49     pyramidFaceTwo->push_back(2);
    50     pyramidFaceTwo->push_back(4);
    51     pyramidGeometry->addPrimitiveSet(pyramidFaceTwo);
    52 
    53     osg::DrawElementsUInt* pyramidFaceThree = 
    54       new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
    55     pyramidFaceThree->push_back(2);
    56     pyramidFaceThree->push_back(3);
    57     pyramidFaceThree->push_back(4);
    58     pyramidGeometry->addPrimitiveSet(pyramidFaceThree);
    59 
    60     osg::DrawElementsUInt* pyramidFaceFour = 
    61       new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
    62     pyramidFaceFour->push_back(3);
    63     pyramidFaceFour->push_back(0);
    64     pyramidFaceFour->push_back(4);
    65     pyramidGeometry->addPrimitiveSet(pyramidFaceFour);
    66 
    67     osg::Vec4Array* colors = new osg::Vec4Array;
    68     colors->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f) ); //index 0 red
    69     colors->push_back(osg::Vec4(0.0f, 1.0f, 0.0f, 1.0f) ); //index 1 green
    70     colors->push_back(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f) ); //index 2 blue
    71     colors->push_back(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f) ); //index 3 white 
    72     colors->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f) ); //index 4 red
    73 
    74     pyramidGeometry->setColorArray(colors);
    75     pyramidGeometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
    76 
    77     // Declare and initialize a transform node.
    78     osg::PositionAttitudeTransform* pyramidTwoXForm = new osg::PositionAttitudeTransform;
    79 
    80     // Use the 'addChild' method of the osg::Group class to
    81     // add the transform as a child of the root node and the
    82     // pyramid node as a child of the transform.
    83     mRoot->addChild(pyramidTwoXForm);
    84     pyramidTwoXForm->addChild(pyramidGeode);
    85 
    86     // Declare and initialize a Vec3 instance to change the
    87     // position of the tank model in the scene
    88     osg::Vec3 pyramidTwoPosition(15,0,0);
    89     pyramidTwoXForm->setPosition( pyramidTwoPosition ); 
    90 
    91     osgUtil::Optimizer optimizer;
    92     optimizer.optimize(mRoot.get());
    93     optimizer.reset();
    94 
    95     // Add the model to the scene
    96    // mRoot->addChild(root.get());
    97 
    98 }

    运行效果:

     http://blog.csdn.net/column/details/osgdemo.html

    http://trac.openscenegraph.org/projects/osg//wiki/Support/Tutorials/BasicGeometry

  • 相关阅读:
    [HDU1561]The more, The Better
    [洛谷P1352][codevs1380]没有上司的舞会
    【51Nod1773】A国的贸易 解题报告
    快速沃尔什变换
    【SDOI2015】序列统计 解题报告
    【CF438E】小朋友和二叉树 解题报告
    多项式Ⅰ
    洛谷 P5105 不强制在线的动态快速排序
    【BZOJ4916】神犇和蒟蒻 解题报告
    【BZOJ3309】DZY Loves Math 解题报告
  • 原文地址:https://www.cnblogs.com/yhlx125/p/4259509.html
Copyright © 2011-2022 走看看