1.基本绘制方法
#include <osgDb/ReadFile>
#include <osgViewer/Viewer>
#include <osg/Node>
#include <osg/Geode>
#include <osg/Geometry>
#include <osgViewer/ViewerEventHandlers>
osg::ref_ptr<osg::Node> CreateQuad();
int main()
{
osgViewer::Viewer viewer;
osg::Group* root = new osg::Group();
root->addChild(CreateQuad().get());
viewer.setSceneData(root);
// 窗口大小变化事件 F
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
viewer.realize();
return viewer.run();
}
osg::ref_ptr<osg::Node> CreateQuad()
{
osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry;
//首先定义四个点
osg::ref_ptr<osg::Vec3Array> vertex = new osg::Vec3Array;
geometry->setVertexArray(vertex.get());
vertex->push_back(osg::Vec3(-1.f, 0.f, -1.f));
vertex->push_back(osg::Vec3(1.f, 0.f, -1.f));
vertex->push_back(osg::Vec3(1.f, 0.f, 1.f));
vertex->push_back(osg::Vec3(-1.f, 0.f, 1.f));
//定义颜色数组
osg::ref_ptr<osg::Vec4Array> color = new osg::Vec4Array;
geometry->setColorArray(color);
geometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
color->push_back(osg::Vec4(1.f, 0.f, 0.f, 1.f));
color->push_back(osg::Vec4(0.f, 1.f, 0.f, 1.f));
color->push_back(osg::Vec4(0.f, 0.f, 1.f, 1.f));
color->push_back(osg::Vec4(1.f, 1.f, 1.f, 1.f));
//定义法线
osg::ref_ptr<osg::Vec3Array> normal = new osg::Vec3Array;
geometry->setNormalArray(normal.get());
geometry->setNormalBinding(osg::Geometry::BIND_OVERALL);
normal->push_back(osg::Vec3(0.f, -1.f, 0.f));
//设置顶点关联方式
geometry->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS, 0, 4));
//几何组结点
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
geode->addDrawable(geometry.get());
return geode.get();
}
2.运行结果
正面
背面
注:osg默认坐标系是x轴向右,y轴向里,z轴向上。故将法线设为-1则是正视图