#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osg/Node>
#include <osg/Geode>
#include <osg/Shape>
#include <osg/ShapeDrawable>
#include <osgViewer/ViewerEventHandlers>
//内置几何类型
osg::ref_ptr<osg::Node> CreateShape();
int main()
{
osgViewer::Viewer viewer;
osg::Group* root = new osg::Group();
root->addChild(CreateShape().get());
viewer.setSceneData(root);
// 窗口大小变化事件 F
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
viewer.realize();
return viewer.run();
}
osg::ref_ptr<osg::Node> CreateShape()
{
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
float radius = 0.08f;
float height = 0.1f;
//指明精细度的类
osg::TessellationHints* hints = new osg::TessellationHints;
hints->setDetailRatio(0.5f); //模型的粗细度0-1
/*
申请球结点:规定圆心、半径、精细度;
盒子结点:规定盒心、长、精细度;
圆锥结点:规定底面圆心、半径、高度、精细度;
圆柱结点:规定底面圆心、半径、高度、精细度;
胶囊体结点:规定半径、圆心、高度、精细度。
*/
geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0.0f, 0.0f, 0.0f), radius), hints));
geode->addDrawable(new osg::ShapeDrawable(new osg::Box(osg::Vec3(0.2f, 0.0f, 0.0f),0.16,0.08,0.16), hints));
geode->addDrawable(new osg::ShapeDrawable(new osg::Cone(osg::Vec3(0.4f, 0.0f, 0.0f), radius, height*2), hints));
geode->addDrawable(new osg::ShapeDrawable(new osg::Cylinder(osg::Vec3(0.6f, 0.0f, 0.0f), radius, height*2), hints));
geode->addDrawable(new osg::ShapeDrawable(new osg::Capsule(osg::Vec3(0.8f, 0.0f, 0.0f), radius, height*2), hints));
return geode.get();
}
osg-05-基本几何图元-内置几何类型
于 2022-06-16 13:34:20 首次发布