OSG:2.创建一个简单的彩色四边形场景

quad.cpp

#include <osg/Geode>

#include <osg/Geometry>


osg::ref_ptr<osg::Node> createSceneGraph()
{
//创建一个用于保存几何信息的图像
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;


//创建四个顶点的数组
osg::ref_ptr<osg::Vec3Array> v = new osg::Vec3Array;
geom->setVertexArray(v.get());
v->push_back(osg::Vec3(-1.0f,0.0f,-1.0f));
v->push_back(osg::Vec3(1.0f,0.0f,-1.0f));
    v->push_back(osg::Vec3(1.0f,0.0f,1.0f));
v->push_back(osg::Vec3(-1.0f,0.0f,1.0f));


//创建四种颜色的数组
osg::ref_ptr<osg::Vec4Array> c = new osg::Vec4Array;
geom->setColorArray(c.get());
geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
c->push_back(osg::Vec4(1.0f,0.0f,0.0f,1.0f));
c->push_back(osg::Vec4(0.0f,1.0f,0.0f,1.0f));
c->push_back(osg::Vec4(0.0f,0.0f,1.0f,1.0f));
c->push_back(osg::Vec4(1.0f,1.0f,1.0f,1.0f));


//为唯一的法线创建一个数组
osg::ref_ptr<osg::Vec3Array> n = new osg::Vec3Array;
geom->setNormalArray(n.get());
geom->setNormalBinding(osg::Geometry::BIND_OVERALL);
n->push_back(osg::Vec3(0.0f,-1.0f,0.0f));


//由保存的数据绘制四个顶点的多边形
geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS,0,4));


//向Geode类添加几何体(Drawable)并返回Geode
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
geode->addDrawable(geom.get());
return geode.get();

}

main.cpp

#include <osg/ref_ptr>
#include <osgDB/Registry>
#include <osgDB/WriteFile>
#include <osg/Notify>
#include <iostream>
using std::endl;


osg::ref_ptr<osg::Node> createSceneGraph();


int main(int argc,char** argv)
{
osg::ref_ptr<osg::Node> root = createSceneGraph(); 
if (!root.valid()) 
{
osg::notify(osg::FATAL) << "failed in createscenegraph()."<< endl; 
return 1;
}
 
bool result = osgDB::writeNodeFile( *(root.get()), "simple.osg" ); 
if ( !result ) 
 osg::notify(osg::FATAL) << "Failed in osgDB::writeNode()." << endl;
}

运行结果:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值