osg入门系列-生成顶点法向量
2014-09-25 13:57
239 查看
#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
--
#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
--
相关文章推荐
- SUMO仿真快速入门系列二:使用XML生成自定义地图
- osg入门系列4- 分页细节层次节点
- MySoft.Data从入门到精通系列(一)【生成实体】
- osg入门系列6- 遮挡查询节点
- osg入门系列13-几何体简化
- osg入门系列10-以索引方式的几何体绘制
- osg入门系列1 - 初识osg
- osg入门系列9-一个正方形
- osg入门系列-渲染状态实例
- OSG MFC入门基础系列
- MySoft.Data从入门到精通系列(二)【生成实体续(插件的使用)】
- osg入门系列7- 一个小房子
- osg入门系列8-一个地球
- osg入门系列14-狄落泥三角网
- Budi Kurniawan写的Struts入门系列终于看完了
- Asp组件中级入门与精通系列之六
- Asp组件初级入门与精通系列之八
- Struts入门文章系列(链接)及学习笔记
- [Eclipse]GEF入门系列(一、Draw2D)
- Asp组件初级入门与精通系列之六