美国海军(NSP)的OSG教程——第一示例

下面是教程中调试通过的代码,运行在3.2版本上。与教程有小的不同。
//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();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值