本文整理汇总了C++中FilterContext::referenceFrame方法的典型用法代码示例。如果您正苦于以下问题:C++ FilterContext::referenceFrame方法的具体用法?C++ FilterContext::referenceFrame怎么用?C++ FilterContext::referenceFrame使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FilterContext
的用法示例。
在下文中一共展示了FilterContext::referenceFrame方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: parts
//.........这里部分代码省略.........
osg::Geometry* osgGeom = new osg::Geometry();
if ( _featureNameExpr.isSet() )
{
const std::string& name = input->eval( _featureNameExpr.mutable_value() );
osgGeom->setName( name );
}
osgGeom->setUseVertexBufferObjects( true );
osgGeom->setUseDisplayList( false );
if ( setWidth && width != 1.0f )
{
osgGeom->getOrCreateStateSet()->setAttributeAndModes(
new osg::LineWidth( width ), osg::StateAttribute::ON );
}
if (part->getType() == Geometry::TYPE_POLYGON && static_cast<Polygon*>(part)->getHoles().size() > 0 )
{
Polygon* poly = static_cast<Polygon*>(part);
int totalPoints = poly->getTotalPointCount();
osg::Vec3Array* allPoints = new osg::Vec3Array( totalPoints );
std::copy( part->begin(), part->end(), allPoints->begin() );
osgGeom->addPrimitiveSet( new osg::DrawArrays( primMode, 0, part->size() ) );
int offset = part->size();
for( RingCollection::const_iterator h = poly->getHoles().begin(); h != poly->getHoles().end(); ++h )
{
Geometry* hole = h->get();
if ( hole->isValid() )
{
std::copy( hole->begin(), hole->end(), allPoints->begin() + offset );
osgGeom->addPrimitiveSet( new osg::DrawArrays( primMode, offset, hole->size() ) );
offset += hole->size();
}
}
osgGeom->setVertexArray( allPoints );
}
else
{
osgGeom->setVertexArray( part->toVec3Array() );
osgGeom->addPrimitiveSet( new osg::DrawArrays( primMode, 0, part->size() ) );
}
// tessellate all polygon geometries. Tessellating each geometry separately
// with TESS_TYPE_GEOMETRY is much faster than doing the whole bunch together
// using TESS_TYPE_DRAWABLE.
if ( part->getType() == Geometry::TYPE_POLYGON && tessellatePolys )
{
osgUtil::Tessellator tess;
//tess.setTessellationType( osgUtil::Tessellator::TESS_TYPE_DRAWABLE );
//tess.setWindingType( osgUtil::Tessellator::TESS_WINDING_ODD );
tess.setTessellationType( osgUtil::Tessellator::TESS_TYPE_GEOMETRY );
tess.setWindingType( osgUtil::Tessellator::TESS_WINDING_POSITIVE );
tess.retessellatePolygons( *osgGeom );
// the tessellator results in a collection of trifans, strips, etc. This step will
// consolidate those into one (or more if necessary) GL_TRIANGLES primitive.
MeshConsolidator::run( *osgGeom );
// mark this geometry as DYNAMIC because otherwise the OSG optimizer will destroy it.
//osgGeom->setDataVariance( osg::Object::DYNAMIC );
}
if ( context.isGeocentric() && part->getType() != Geometry::TYPE_POINTSET )
{
double threshold = osg::DegreesToRadians( *_maxAngle_deg );
MeshSubdivider ms( context.referenceFrame(), context.inverseReferenceFrame() );
//ms.setMaxElementsPerEBO( INT_MAX );
ms.run( threshold, *osgGeom );
}
// set the color array. We have to do this last, otherwise it screws up any modifications
// make by the MeshSubdivider. No idea why. gw
//osg::Vec4Array* colors = new osg::Vec4Array( osgGeom->getVertexArray()->getNumElements() );
//for( unsigned c = 0; c < colors->size(); ++c )
// (*colors)[c] = color;
//osgGeom->setColorArray( colors );
//osgGeom->setColorBinding( osg::Geometry::BIND_PER_VERTEX );
// NOTE! per-vertex colors makes the optimizer destroy the geometry....
osg::Vec4Array* colors = new osg::Vec4Array(1);
(*colors)[0] = color;
osgGeom->setColorArray( colors );
osgGeom->setColorBinding( osg::Geometry::BIND_OVERALL );
// add the part to the geode.
_geode->addDrawable( osgGeom );
}
return true;
}