当前位置: 首页>>代码示例>>C++>>正文


C++ Terrain::begin方法代码示例

本文整理汇总了C++中Terrain::begin方法的典型用法代码示例。如果您正苦于以下问题:C++ Terrain::begin方法的具体用法?C++ Terrain::begin怎么用?C++ Terrain::begin使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Terrain的用法示例。


在下文中一共展示了Terrain::begin方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: updateVisual

void edTerrainNode::updateVisual()
{
	osg::ref_ptr<osgUtil::SmoothingVisitor> sv= new osgUtil::SmoothingVisitor();
//	double cellDim= 1000.0;
	CellCoords coords;
	osg::Vec3d center;
	Terrain terrain;
	if (selectedVisuals.empty())
	{
		double maxX= -1000000.0;
		double minX=  1000000.0;
		double maxY= -1000000.0;
		double minY=  1000000.0;
		for (unsigned int i=0; i<triangles.size(); i++)
		{
			center= triangles[i].getCenter();
			if (center.x()<minX) minX= center.x();
			if (center.x()>maxX) maxX= center.x();
			if (center.y()<minY) minY= center.y();
			if (center.y()>maxY) maxY= center.y();
			coords.first=  Editor::lastInstance()->getCellX(center.x());//Editor::cellDim;
			coords.second=  Editor::lastInstance()->getCellY(center.y());//Editor::cellDim;
//			coords.second= center.y()/Editor::cellDim;
			terrain[coords].push_back(&triangles[i]);

		}
		pos.set(minX*0.5+maxX*0.5,minY*0.5+maxY*0.5,0);
		osg::Geometry *geom;
		osg::Texture2D *tex= NULL;
		osg::Material *mater= NULL;
		osg::StateSet *dstate= NULL;
		osg::Geode *geode= NULL;
		osg::TexEnvCombine *envComb= NULL;
		osg::Vec3Array *v;
		osg::Vec3Array *norm;
		osg::Vec2Array *t;
		osg::Vec2Array *t1;
		osg::Vec2Array *t2;
		osg::Vec4Array *col;
		osg::Matrixd mat;
		osg::Vec3d origin,vert,texc;
		TriList::iterator tri_iter;
		Terrain::iterator it;
//		char buf[256];
		setNumVisuals(terrain.size());
		for (it=terrain.begin(); it!=terrain.end(); ++it)
		{
			osg::MatrixTransform *trans= Editor::lastInstance()->getOrCreateCell(it->first.first,it->first.second);
//			trans->setNodeMask(Editor::nm_SolidTerrain);
			origin= trans->getMatrix().getTrans();
//			origin.set(it->first.first*Editor::cellDim,it->first.second*Editor::cellDim,0);
//			nameFromCoords5(buf,it->first.first,it->first.second);
//			for (unsigned int i=0; i<terrainRoot->getNumChildren(); i++)
//				if (terrainRoot->getChild(i)->getName().compare(buf)==0)
//				{
//					trans= dynamic_cast<osg::MatrixTransform*>(terrainRoot->getChild(i));
//					break;
//				}
//			if (trans==NULL)
//			{
//				mat.makeTranslate(origin);
//				trans= new osg::MatrixTransform(mat);
//				trans->setName(buf);
//				terrainRoot->addChild(trans);	
//			}
			unsigned int n= it->second.size();
			if (n>0)
			{
				if (!material.valid())
				{
//					DoubleMaterialTris singleMatTris;
					DoubleMaterialTris dblMatTris;
					TrippleMaterialTris trplMatTris;
					TerrainMaterial* mats[]= { NULL,NULL,NULL };
					MaterialPair matPair;
					for (tri_iter= it->second.begin(); tri_iter!=it->second.end(); ++tri_iter)
					{
						for (unsigned int i=0; i<3; i++)
						{
//							if ((*tri_iter)->v[i]->getTerrainOwnersList().size()>0)
								mats[i]= (*tri_iter)->getValidMaterial(i);//(*tri_iter)->v[i]->getTerrainOwnersList().front()->material.get();
//							else
//								mats[i]= NULL;

						}
						if (mats[0]==NULL || mats[1]==NULL || mats[2]==NULL)
							continue;
						if (mats[0]!=mats[1] && mats[0]!=mats[2] && mats[1]!=mats[2])
						{
							trplMatTris.push_back(*tri_iter);
							continue;
						}
						matPair.first= mats[0];
						if (mats[1]!=matPair.first)
						{
							matPair.second= mats[1];
						}
						else
							matPair.second= mats[2];
						if (matPair.first>matPair.second)
//.........这里部分代码省略.........
开发者ID:BackupTheBerlios,项目名称:eu07-svn,代码行数:101,代码来源:terrainNode.cpp


注:本文中的Terrain::begin方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。