本文整理汇总了C++中osg::Drawable类的典型用法代码示例。如果您正苦于以下问题:C++ Drawable类的具体用法?C++ Drawable怎么用?C++ Drawable使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Drawable类的17个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: handle
void SimpleDotVisitor::handle(osg::Drawable &drawable, int id)
{
std::stringstream label;
label << "<top> " << drawable.className();
if (!drawable.getName().empty())
{
label << "| " << drawable.getName();
}
drawNode(id, "record", "solid", label.str(), "blue", "white");
}
开发者ID:hyyh619,项目名称:OpenSceneGraph-3.4.0,代码行数:12,代码来源:SimpleDotVisitor.cpp
示例2: apply
void apply(osg::Drawable& geom)
{
if (_hardware) {
osgAnimation::RigGeometry* rig = dynamic_cast<osgAnimation::RigGeometry*>(&geom);
if (rig)
rig->setRigTransformImplementation(new MyRigTransformHardware);
}
#if 0
if (geom.getName() != std::string("BoundingBox")) // we disable compute of bounding box for all geometry except our bounding box
geom.setComputeBoundingBoxCallback(new osg::Drawable::ComputeBoundingBoxCallback);
// geom.setInitialBound(new osg::Drawable::ComputeBoundingBoxCallback);
#endif
}
开发者ID:yueying,项目名称:osg,代码行数:14,代码来源:osganimationhardware.cpp
示例3: apply
void GLObjectsVisitor::apply(osg::Drawable& drawable)
{
if (_drawablesAppliedSet.count(&drawable)!=0) return;
if (_checkGLErrors==osg::State::ONCE_PER_ATTRIBUTE) _renderInfo.getState()->checkGLErrors("start of Drawable::apply(osg::Drawable& drawable)");
_drawablesAppliedSet.insert(&drawable);
if (drawable.getStateSet())
{
apply(*(drawable.getStateSet()));
}
if (_mode&SWITCH_OFF_DISPLAY_LISTS)
{
drawable.setUseDisplayList(false);
}
if (_mode&SWITCH_ON_DISPLAY_LISTS)
{
drawable.setUseDisplayList(true);
}
if (_mode&SWITCH_ON_VERTEX_BUFFER_OBJECTS)
{
drawable.setUseVertexBufferObjects(true);
}
if (_mode&SWITCH_OFF_VERTEX_BUFFER_OBJECTS)
{
drawable.setUseVertexBufferObjects(false);
}
if (_mode&COMPILE_DISPLAY_LISTS && _renderInfo.getState() &&
(drawable.getUseDisplayList() || drawable.getUseVertexBufferObjects()))
{
drawable.compileGLObjects(_renderInfo);
if (_checkGLErrors==osg::State::ONCE_PER_ATTRIBUTE) _renderInfo.getState()->checkGLErrors("after drawable.compileGLObjects() call in Drawable::apply(osg::Drawable& drawable) ");
}
if (_mode&RELEASE_DISPLAY_LISTS)
{
drawable.releaseGLObjects(_renderInfo.getState());
}
}
开发者ID:aluaces,项目名称:OpenSceneGraph,代码行数:48,代码来源:GLObjectsVisitor.cpp
示例4: switch
void
VertexCacheOptimizer::apply(osg::Drawable& drawable)
{
if (drawable.getDataVariance() == osg::Object::DYNAMIC)
return;
osg::Geometry* geom = drawable.asGeometry();
if ( geom )
{
if ( geom->getDataVariance() == osg::Object::DYNAMIC )
return;
// vertex cache optimizations currently only support surface geometries.
// all or nothing in the geode.
osg::Geometry::PrimitiveSetList& psets = geom->getPrimitiveSetList();
for( osg::Geometry::PrimitiveSetList::iterator i = psets.begin(); i != psets.end(); ++i )
{
switch( (*i)->getMode() )
{
case GL_TRIANGLES:
case GL_TRIANGLE_FAN:
case GL_TRIANGLE_STRIP:
case GL_QUADS:
case GL_QUAD_STRIP:
case GL_POLYGON:
break;
default:
return;
}
}
}
//OE_NOTICE << LC << "VC optimizing..." << std::endl;
// passed the test; run the optimizer.
osgUtil::VertexCacheVisitor vcv;
drawable.accept( vcv );
vcv.optimizeVertices();
osgUtil::VertexAccessOrderVisitor vaov;
drawable.accept( vaov );
vaov.optimizeOrder();
traverse( drawable );
}
开发者ID:pprabhu78,项目名称:osgearth,代码行数:47,代码来源:Utils.cpp
示例5: printTriangles
// decompose Drawable primitives into triangles, print out these triangles and computed normals.
void printTriangles(const std::string& name, osg::Drawable& drawable)
{
std::cout<<name<<std::endl;
osg::TriangleFunctor<NormalPrint> tf;
drawable.accept(tf);
std::cout<<std::endl;
}
开发者ID:AdriCS,项目名称:osg,代码行数:10,代码来源:osggeometry.cpp
示例6: apply
void GLObjectsVisitor::apply(osg::Drawable& drawable)
{
if (_drawablesAppliedSet.count(&drawable)!=0) return;
_drawablesAppliedSet.insert(&drawable);
if (_mode&SWITCH_OFF_DISPLAY_LISTS)
{
drawable.setUseDisplayList(false);
}
if (_mode&SWITCH_ON_DISPLAY_LISTS)
{
drawable.setUseDisplayList(true);
}
if (_mode&SWITCH_ON_VERTEX_BUFFER_OBJECTS)
{
drawable.setUseVertexBufferObjects(true);
}
if (_mode&SWITCH_OFF_VERTEX_BUFFER_OBJECTS)
{
drawable.setUseVertexBufferObjects(false);
}
if (_mode&COMPILE_DISPLAY_LISTS && _renderInfo.getState() &&
(drawable.getUseDisplayList() || drawable.getUseVertexBufferObjects()))
{
drawable.compileGLObjects(_renderInfo);
}
if (_mode&RELEASE_DISPLAY_LISTS)
{
drawable.releaseGLObjects(_renderInfo.getState());
}
if (drawable.getStateSet())
{
apply(*(drawable.getStateSet()));
}
}
开发者ID:bsmr-opengl,项目名称:OpenSceneGraph,代码行数:42,代码来源:GLObjectsVisitor.cpp
示例7: computeNearestPointInFrustum
CullVisitor::value_type CullVisitor::computeNearestPointInFrustum(const osg::Matrix& matrix, const osg::Polytope::PlaneList& planes,const osg::Drawable& drawable)
{
// OSG_WARN<<"CullVisitor::computeNearestPointInFrustum("<<getTraversalNumber()<<"\t"<<planes.size()<<std::endl;
osg::TriangleFunctor<ComputeNearestPointFunctor> cnpf;
cnpf.set(_computed_znear, matrix, &planes);
drawable.accept(cnpf);
return cnpf._znear;
}
开发者ID:dev2dev,项目名称:OpenSceneGraph-port-to-IOS,代码行数:11,代码来源:CullVisitor.cpp
示例8: apply
virtual void apply(osg::Drawable &drawable)
{
if (!mTriangleMesh)
mTriangleMesh.reset(new btTriangleMesh);
osg::Matrixf worldMat = osg::computeLocalToWorld(getNodePath());
osg::TriangleFunctor<GetTriangleFunctor> functor;
functor.setTriMesh(mTriangleMesh.get());
functor.setMatrix(worldMat);
drawable.accept(functor);
}
开发者ID:EmperorArthur,项目名称:openmw,代码行数:11,代码来源:bulletshapemanager.cpp
示例9: apply
void ShaderGenVisitor::apply(osg::Drawable &drawable)
{
osg::StateSet *stateSet = drawable.getStateSet();
if (stateSet)
_state->pushStateSet(stateSet);
update(&drawable);
if (stateSet)
_state->popStateSet();
}
开发者ID:aluaces,项目名称:OpenSceneGraph,代码行数:11,代码来源:ShaderGen.cpp
示例10: apply
void StatsVisitor::apply(osg::Drawable& drawable)
{
if (drawable.getStateSet())
{
++_numInstancedStateSet;
_statesetSet.insert(drawable.getStateSet());
}
++_numInstancedDrawable;
drawable.accept(_instancedStats);
_drawableSet.insert(&drawable);
osg::Geometry* geometry = dynamic_cast<osg::Geometry*>(&drawable);
if (geometry)
{
++_numInstancedGeometry;
_geometrySet.insert(geometry);
}
}
开发者ID:nitrologic,项目名称:mod,代码行数:21,代码来源:Statistics.cpp
示例11: apply
void
BuildTopologyVisitor::apply(osg::Drawable& drawable)
{
osg::Geometry* geom = drawable.asGeometry();
if (geom)
{
osg::Vec3Array* verts = dynamic_cast<osg::Vec3Array*>(geom->getVertexArray());
if (verts)
{
apply(&drawable, verts);
}
}
}
开发者ID:JD31,项目名称:osgearth,代码行数:13,代码来源:TopologyGraph.cpp
示例12: apply
void ShaderVisitor::apply(osg::Drawable& drawable)
{
// non-Geometry drawable (e.g. particle system)
bool needPop = (drawable.getStateSet() != NULL);
if (drawable.getStateSet())
{
pushRequirements();
applyStateSet(drawable.getStateSet(), drawable);
}
if (!mRequirements.empty())
{
const ShaderRequirements& reqs = mRequirements.back();
// TODO: find a better place for the stateset
if (reqs.mShaderRequired || mForceShaders)
createProgram(reqs, drawable);
}
if (needPop)
popRequirements();
}
开发者ID:HedgehogGrandpa,项目名称:openmw,代码行数:22,代码来源:shadervisitor.cpp
示例13: traverse
void
AllocateAndMergeBufferObjectsVisitor::apply(osg::Drawable& drawable)
{
osg::Geometry* geom = drawable.asGeometry();
if ( geom )
{
// We disable vbo's and then re-enable them to enable sharing of all the arrays.
geom->setUseDisplayList( false );
geom->setUseVertexBufferObjects( false );
geom->setUseVertexBufferObjects( true );
}
traverse(drawable);
}
开发者ID:pprabhu78,项目名称:osgearth,代码行数:13,代码来源:Utils.cpp
示例14: apply
void StatsVisitor::apply(osg::Drawable& drawable)
{
if (drawable.getStateSet())
{
apply(*drawable.getStateSet());
}
++_numInstancedDrawable;
drawable.accept(_instancedStats);
_drawableSet.insert(&drawable);
osg::Geometry* geometry = drawable.asGeometry();
if (geometry)
{
++_numInstancedGeometry;
_geometrySet.insert(geometry);
++_numInstancedFastGeometry;
_fastGeometrySet.insert(geometry);
}
}
开发者ID:AndreyIstomin,项目名称:osg,代码行数:23,代码来源:Statistics.cpp
示例15: updateCalculatedNearFar
bool CullVisitor::updateCalculatedNearFar(const osg::Matrix& matrix,const osg::Drawable& drawable, bool isBillboard)
{
const osg::BoundingBox& bb = drawable.getBound();
value_type d_near, d_far;
if (isBillboard)
{
#ifdef TIME_BILLBOARD_NEAR_FAR_CALCULATION
static unsigned int lastFrameNumber = getTraversalNumber();
static unsigned int numBillboards = 0;
static double elapsed_time = 0.0;
if (lastFrameNumber != getTraversalNumber())
{
OSG_NOTICE<<"Took "<<elapsed_time<<"ms to test "<<numBillboards<<" billboards"<<std::endl;
numBillboards = 0;
elapsed_time = 0.0;
lastFrameNumber = getTraversalNumber();
}
osg::Timer_t start_t = osg::Timer::instance()->tick();
#endif
osg::Vec3 lookVector(-matrix(0,2),-matrix(1,2),-matrix(2,2));
unsigned int bbCornerFar = (lookVector.x()>=0?1:0) +
(lookVector.y()>=0?2:0) +
(lookVector.z()>=0?4:0);
unsigned int bbCornerNear = (~bbCornerFar)&7;
d_near = distance(bb.corner(bbCornerNear),matrix);
d_far = distance(bb.corner(bbCornerFar),matrix);
OSG_NOTICE.precision(15);
if (false)
{
OSG_NOTICE<<"TESTING Billboard near/far computation"<<std::endl;
// OSG_WARN<<"Checking corners of billboard "<<std::endl;
// deprecated brute force way, use all corners of the bounding box.
value_type nd_near, nd_far;
nd_near = nd_far = distance(bb.corner(0),matrix);
for(unsigned int i=0;i<8;++i)
{
value_type d = distance(bb.corner(i),matrix);
if (d<nd_near) nd_near = d;
if (d>nd_far) nd_far = d;
OSG_NOTICE<<"\ti="<<i<<"\td="<<d<<std::endl;
}
if (nd_near==d_near && nd_far==d_far)
{
OSG_NOTICE<<"\tBillboard near/far computation correct "<<std::endl;
}
else
{
OSG_NOTICE<<"\tBillboard near/far computation ERROR\n\t\t"<<d_near<<"\t"<<nd_near
<<"\n\t\t"<<d_far<<"\t"<<nd_far<<std::endl;
}
}
#ifdef TIME_BILLBOARD_NEAR_FAR_CALCULATION
osg::Timer_t end_t = osg::Timer::instance()->tick();
elapsed_time += osg::Timer::instance()->delta_m(start_t,end_t);
++numBillboards;
#endif
}
else
{
// efficient computation of near and far, only taking into account the nearest and furthest
// corners of the bounding box.
d_near = distance(bb.corner(_bbCornerNear),matrix);
d_far = distance(bb.corner(_bbCornerFar),matrix);
}
if (d_near>d_far)
{
std::swap(d_near,d_far);
if ( !EQUAL_F(d_near, d_far) )
{
OSG_WARN<<"Warning: CullVisitor::updateCalculatedNearFar(.) near>far in range calculation,"<< std::endl;
OSG_WARN<<" correcting by swapping values d_near="<<d_near<<" dfar="<<d_far<< std::endl;
}
}
if (d_far<0.0)
{
// whole object behind the eye point so discard
return false;
}
if (d_near<_computed_znear)
{
if (_computeNearFar==COMPUTE_NEAR_FAR_USING_PRIMITIVES)
{
//.........这里部分代码省略.........
开发者ID:dev2dev,项目名称:OpenSceneGraph-port-to-IOS,代码行数:101,代码来源:CullVisitor.cpp
示例16: setDrawableToAlwaysCull
void osgManipulator::setDrawableToAlwaysCull(osg::Drawable& drawable)
{
ForceCullCallback* cullCB = new ForceCullCallback;
drawable.setCullCallback (cullCB);
}
开发者ID:joevandyk,项目名称:osg,代码行数:5,代码来源:Dragger.cpp
示例17: distance
void
ProxyCullVisitor::apply(osg::Drawable& drawable)
{
if ( isCulledByProxyFrustum(drawable) )
return;
_cv->pushOntoNodePath( &drawable );
// push the node's state.
osg::StateSet* node_state = drawable.getStateSet();
if (node_state) _cv->pushStateSet(node_state);
osg::RefMatrix& matrix = *_cv->getModelViewMatrix();
const osg::BoundingBox& bb = Utils::getBoundingBox(&drawable);
bool culledOut = false;
if( drawable.getCullCallback() )
{
if (drawable.getCullCallback()->run(&drawable, _cv) == true)
culledOut = true;
}
if (!culledOut)
{
if (drawable.isCullingActive() && isCulledByProxyFrustum(bb))
culledOut = true;
}
if ( !culledOut && _cv->getComputeNearFarMode() && bb.valid())
{
if (!_cv->updateCalculatedNearFar(matrix,drawable,false))
culledOut = true;
}
if (!culledOut)
{
// need to track how push/pops there are, so we can unravel the stack correctly.
unsigned int numPopStateSetRequired = 0;
// push the geoset's state on the geostate stack.
osg::StateSet* stateset = drawable.getStateSet();
if (stateset)
{
++numPopStateSetRequired;
_cv->pushStateSet(stateset);
}
osg::CullingSet& cs = _cv->getCurrentCullingSet();
if (!cs.getStateFrustumList().empty())
{
osg::CullingSet::StateFrustumList& sfl = cs.getStateFrustumList();
for(osg::CullingSet::StateFrustumList::iterator itr = sfl.begin();
itr != sfl.end();
++itr)
{
if (itr->second.contains(bb))
{
++numPopStateSetRequired;
_cv->pushStateSet(itr->first.get());
}
}
}
float depth = bb.valid() ? distance(bb.center(),matrix) : 0.0f;
if (osg::isNaN(depth))
{
for (osg::NodePath::const_iterator i = getNodePath().begin(); i != getNodePath().end(); ++i)
{
OSG_DEBUG << " \"" << (*i)->getName() << "\"" << std::endl;
}
}
else
{
_cv->addDrawableAndDepth(&drawable,&matrix,depth);
}
for(unsigned int i=0;i< numPopStateSetRequired; ++i)
{
_cv->popStateSet();
}
}
// pop the node's state off the geostate stack.
if (node_state) _cv->popStateSet();
_cv->popFromNodePath();
}
开发者ID:mathieu,项目名称:osgearth,代码行数:90,代码来源:CullingUtils.cpp
注:本文中的osg::Drawable类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论