您的位置:首页 > 编程语言

OpenSceneGraph三维渲染引擎编程指南第四章第一个例子

2016-10-19 17:44 141 查看
OpenSceneGraph三维渲染引擎编程指南.肖鹏等.2010.1. 第四章的第一个例子
#include <osgViewer/Viewer>

#include <osg/Node>
#include <osg/Geode>
#include <osg/Group>

#include <osgDB/ReadFile>
#include <osgDB/WriteFile>

#include <osgUtil/Optimizer>

osg::ref_ptr<osg::Node> 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);

osg::ref_ptr<osg::Vec3Array> nc = new osg::Vec3Array();
nc->push_back(osg::Vec3(0.0f, -1.0f, 0.0f));

//设置法线数组
geom->setNormalArray(nc.get());
geom->setNormalBinding(osg::Geometry::BIND_OVERALL);

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

geode->addDrawable(geom.get());
return geode.get();
}

int main()
{
//创建Viewer对象,场景浏览器
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();

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

//添加到场景
root->addChild(createQuad());

//优化场景数据
osgUtil::Optimizer optimizer;
optimizer.optimize(root.get());

// set the scene to render
viewer->setSceneData(root.get());

viewer->realize();

viewer->run();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: