多自由度机械臂模拟6

模拟一个完整的吊装流程,初始状态->起臂->放下吊绳->竖直起吊->水平旋转->放下物体->收缩吊绳。

osg::ref_ptr<osg::Node> createSimple() 
{
    osg::ref_ptr<osg::Geode> geode = new osg::Geode;
    osg::ref_ptr<osg::Geometry> geo = new osg::Geometry;

    //申请一些顶点
    osg::ref_ptr<osg::Vec3Array> vers = new osg::Vec3Array;
    geo->setVertexArray(vers.get());
#if 1
    geo->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINE_LOOP, 0, 4));//创建一个线圈
#else
    geo->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS, 0, 4));//创建一个正方形
#endif


                                                                              //设置顶点
    vers->push_back(osg::Vec3(-15, 3.0, -15));
    vers->push_back(osg::Vec3(15, 3.0, -15));
    vers->push_back(osg::Vec3(15, 3.0, 15));
    vers->push_back(osg::Vec3(-15, 3.0, 15));

    //申请颜色
    osg::ref_ptr<osg::Vec4Array> color = new osg::Vec4Array();
    color->push_back(osg::Vec4(1.0, 0.0, 0.0, 0.5));
    color->push_back(osg::Vec4(0.0, 1.0, 0.0, 0.5));
    color->push_back(osg::Vec4(0.0, 0.0, 1.0, 0.5));
    color->push_back(osg::Vec4(1.0, 1.0, 0.0, 0.5));

    //设置颜色
    geo->setColorArray(color.get());
    geo->setColorBinding(osg::Geometry::AttributeBinding::BIND_PER_VERTEX);//设置颜色绑定

                                                                           //设置法线,正对屏幕的时候最亮
    osg::ref_ptr<osg::Vec3Array> norm = new osg::Vec3Array;
    geo->setNormalArray(norm);
    geo->setNormalBinding(osg::Geometry::AttributeBinding::BIND_OVERALL);
    norm->push_back(osg::Vec3(0.0, -1.0, 0.0));

    //打开透明度
    geo->getOrCreateStateSet()->setMode(GL_BLEND, osg::StateAttribute::ON);

    //设置线宽
    osg::ref_ptr<osg::LineWidth> w = new osg::LineWidth;
    w->setWidth(5.0);
    geo->getOrCreateStateSet()->setAttributeAndModes(w.get(), osg::StateAttribute::ON);

    geode->addDrawable(geo.get());

    return geode;
}

//代码参考:https://blog.csdn.net/wb175208/article/details/80513775

猜你喜欢

转载自www.cnblogs.com/herd/p/11420574.html