码迷,mamicode.com
首页 > 其他好文 > 详细

美国海军(NPS)的OSG教程——示例代码一

时间:2015-01-26 19:16:19      阅读:617      评论:0      收藏:0      [点我收藏+]

标签:

//OSG 3.2版本
	osg::Group *root = new osg::Group();
	osg::Geode *pyramidGeode = new osg::Geode();
	deprecated_osg::Geometry *pyramidGeometry = new deprecated_osg::Geometry();			//注意,用deprecated_osg,某些功能以后可能去掉

	pyramidGeode->addDrawable( pyramidGeometry );
	root->addChild( pyramidGeode );

	//定义点
	osg::Vec3Array *pyramidVertices = new osg::Vec3Array();
	pyramidVertices->push_back( osg::Vec3(0,0,0) );			//左前
	pyramidVertices->push_back( osg::Vec3(10,0,0) );		//右前
	pyramidVertices->push_back( osg::Vec3(10,10,0) );		//右后
	pyramidVertices->push_back( osg::Vec3(0,10,0) );		//左后
	pyramidVertices->push_back( osg::Vec3(5,5,10) );		//塔尖

	pyramidGeometry->setVertexArray( pyramidVertices );

	//定义面
	osg::DrawElementsUInt *pyramidBase = new osg::DrawElementsUInt( osg::PrimitiveSet::QUADS, 0 );
	pyramidBase->push_back(3);
	pyramidBase->push_back(2);
	pyramidBase->push_back(1);
	pyramidBase->push_back(0);
	pyramidGeometry->addPrimitiveSet( pyramidBase );

	osg::DrawElementsUInt *pyramidFaceOne = new osg::DrawElementsUInt( osg::PrimitiveSet::TRIANGLES, 0 );
	pyramidFaceOne->push_back(0);
	pyramidFaceOne->push_back(1);
	pyramidFaceOne->push_back(4);	
	pyramidGeometry->addPrimitiveSet( pyramidFaceOne );

	osg::DrawElementsUInt *pyramidFaceTwo = new osg::DrawElementsUInt( osg::PrimitiveSet::TRIANGLES, 0 );
	pyramidFaceTwo->push_back(1);
	pyramidFaceTwo->push_back(2);
	pyramidFaceTwo->push_back(4);	
	pyramidGeometry->addPrimitiveSet( pyramidFaceTwo );

	osg::DrawElementsUInt *pyramidFaceThree = new osg::DrawElementsUInt( osg::PrimitiveSet::TRIANGLES, 0 );
	pyramidFaceThree->push_back(2);
	pyramidFaceThree->push_back(3);
	pyramidFaceThree->push_back(4);	
	pyramidGeometry->addPrimitiveSet( pyramidFaceThree );

	osg::DrawElementsUInt *pyramidFaceFour = new osg::DrawElementsUInt( osg::PrimitiveSet::TRIANGLES, 0 );
	pyramidFaceFour->push_back(3);
	pyramidFaceFour->push_back(0);
	pyramidFaceFour->push_back(4);	
	pyramidGeometry->addPrimitiveSet( pyramidFaceFour );

	//定义颜色
	osg::Vec4Array *colors = new osg::Vec4Array;
	colors->push_back( osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f) );		//红色
	colors->push_back( osg::Vec4(0.0f, 1.0f, 0.0f, 1.0f) );		//绿色
	colors->push_back( osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f) );		//蓝色
	colors->push_back( osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f) );		//白色

	osg::TemplateIndexArray< unsigned int, osg::Array::UIntArrayType, 4, 4 > *colorIndexArray;
	colorIndexArray = new osg::TemplateIndexArray< unsigned int, osg::Array::UIntArrayType, 4, 4 >;
	colorIndexArray->push_back(0);
	colorIndexArray->push_back(1);
	colorIndexArray->push_back(2);
	colorIndexArray->push_back(3);
	colorIndexArray->push_back(0);

	pyramidGeometry->setColorArray( colors );
	pyramidGeometry->setColorIndices( colorIndexArray );
	pyramidGeometry->setColorBinding( deprecated_osg::Geometry::BIND_PER_VERTEX );

	osg::Vec2Array *texcoords = new osg::Vec2Array(5);
	(*texcoords)[0].set(0.00f,0.0f);
	(*texcoords)[1].set(0.25f,0.0f);
	(*texcoords)[2].set(0.50f,0.0f);
	(*texcoords)[3].set(0.75f,0.0f);
	(*texcoords)[4].set(0.50f,1.0f);
	pyramidGeometry->setTexCoordArray(0, texcoords);

	//必须加
	osgUtil::Optimizer optimizer ;
	optimizer.optimize(root) ;	

	osgViewer::Viewer viewer;
	viewer.setSceneData(root);
	//初始化并创建窗口
	//viewer.realize();
	viewer.run();

美国海军(NPS)的OSG教程——示例代码一

标签:

原文地址:http://blog.csdn.net/morbi/article/details/43156013

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!