天天看点

osg入门系列-生成顶点法向量

#include <osgViewer/Viewer>

#include <osgViewer/ViewerEventHandlers>

#include <osg/Node>

#include <osg/Geode>

#include <osg/Group>

#include <osgDB/ReadFile>

#include <osgDB/WriteFile>

#include <osgGA/StateSetManipulator>

#include <osgUtil/Optimizer>

#include <osgUtil/SmoothingVisitor>

#include <iostream>

using namespace std;

osg::ref_ptr<osg::Geometry> createQuad()

{

    osg::ref_ptr<osg::Geode> geode = new osg::Geode();

    osg::ref_ptr<osg::Geometry> geom = new osg::Geometry();

    osg::ref_ptr<osg::Vec3Array> v = new osg::Vec3Array();

    v->push_back(osg::Vec3(0.0f, 0.0f, 0.0f));

    v->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));

    v->push_back(osg::Vec3(1.0f, 0.0f, 1.0f));

    v->push_back(osg::Vec3(0.0f, 0.0f, 1.0f));

    geom->setVertexArray(v.get());

    osg::ref_ptr<osg::Vec2Array> vt = new osg::Vec2Array();

    vt->push_back(osg::Vec2(0.0f, 0.0f));

    vt->push_back(osg::Vec2(1.0f, 0.0f));

    vt->push_back(osg::Vec2(1.0f, 1.0f));

    vt->push_back(osg::Vec2(0.0f, 1.0f));

    geom->setTexCoordArray(0, vt.get());

    osg::ref_ptr<osg::Vec4Array> vc = new osg::Vec4Array();

    vc->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f));

    vc->push_back(osg::Vec4(0.0f, 1.0f, 0.0f, 1.0f));

    vc->push_back(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f));

    vc->push_back(osg::Vec4(1.0f, 1.0f, 0.0f, 1.0f));

    geom->setColorArray(vc.get());

    geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX);

    geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS, 0, 4));

    return geom.get();

}

int main()

{

    osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();

    osg::ref_ptr<osg::Group> root = new osg::Group();

    osg::ref_ptr<osg::Geometry> geometry = createQuad();

    osgUtil::SmoothingVisitor::smooth(*(geometry.get()));

    osg::ref_ptr<osg::Geode> geode = new osg::Geode();

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

    root->addChild(geode.get());

    osgUtil::Optimizer optimizer;

    optimizer.optimize(root.get());

    viewer->setSceneData(root.get());

    viewer->realize();

    viewer->run();

    return 0;

}

---

LIBS += -L/usr/local/lib/

LIBS += -lOpenThreads

LIBS += -losg

LIBS += -losgDB

LIBS += -losgFX

LIBS += -losgGA

LIBS += -losgManipulator

LIBS += -losgParticle

LIBS += -losgShadow

LIBS += -losgSim

LIBS += -losgTerrain

LIBS += -losgText

LIBS += -losgUtil

LIBS += -losgViewer

--

osg入门系列-生成顶点法向量