本文整理汇总了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)
//.........这里部分代码省略.........