OSG开发入门 HelloWorld实例

一、代码

osg::ref_ptr createSceneGraph()
{
	osg::ref_ptr geom = new osg::Geometry();

	osg::ref_ptr v = new osg::Vec3Array();
	geom->setVertexArray(v.get());
	v->push_back(osg::Vec3(-1.f, 0.f, -1.f));
	v->push_back(osg::Vec3(1.f, 0.f, -1.f));
	v->push_back(osg::Vec3(1.f, 0.f, 1.f));
	v->push_back(osg::Vec3(-1.f, 0.f, 1.f));

	osg::ref_ptr c = new osg::Vec4Array();
	geom->setColorArray(c.get());
	geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
	c->push_back(osg::Vec4(1.f, 0.f, 0.f, 1.f));
	c->push_back(osg::Vec4(0.f, 1.f, 0.f, 1.f));
	c->push_back(osg::Vec4(0.f, 0.f, 1.f, 1.f));
	c->push_back(osg::Vec4(1.f, 1.f, 1.f, 1.f));

	osg::ref_ptr n = new osg::Vec3Array();
	geom->setNormalArray(n.get());
	geom->setNormalBinding(osg::Geometry::BIND_OVERALL);
	n->push_back(osg::Vec3(0.f, -1.f, 0.f));

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

	osg::ref_ptr geode = new osg::Geode();
	geode->addDrawable(geom.get());
	return geode.get();
}
int _tmain(int argc, _TCHAR* argv[])
{
	osg::ref_ptr root = new osg::Group();
	osg::ref_ptr node = createSceneGraph();
	root->addChild(node.get());
	
	osgViewer::Viewer viewer;
	viewer.setSceneData(root);

	viewer.realize(); 
	viewer.run();
	return 0;
}

二、运行效果

OSG开发入门 HelloWorld实例_第1张图片

 

你可能感兴趣的:(C/C++,OSG)