osg.EndOfDynamicDrawBlock
是OpenSceneGraph中的一个状态对象,用于表示动态绘制块的结束。当动态绘制块结束时,调用此状态对象可以通知OpenSceneGraph该块的绘制已完成。
class EndOfDynamicDrawBlock : public StateAttribute
当您需要在场景中动态地生成三角形或其他几何体时,通常会使用动态绘制。在动态绘制期间,您可以连续调用一系列绘图命令来创建几何体。当您完成绘制并准备提交几何体时,可以通过调用osg.EndOfDynamicDrawBlock
来通知OpenSceneGraph该块的绘制已完成。
以下代码片段演示了使用osg.EndOfDynamicDrawBlock
结束动态绘制块的方法:
osg::ref_ptr<osg::Geode> geode = new osg::Geode();
osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry();
// add vertices data to geometry object
geometry->setVertexArray(vertices);
// add colors data to geometry object
geometry->setColorArray(colors);
geometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
geode->addDrawable(geometry.get());
// start dynamic draw block
geometry->begin(osg::PrimitiveSet::TRIANGLES);
// draw triangles using vertices and colors
geometry->drawArrays(osg::PrimitiveSet::TRIANGLES, 0, 3);
geometry->drawArrays(osg::PrimitiveSet::TRIANGLES, 3, 3);
// end dynamic draw block
geometry->end();
osg::StateSet* stateset = geode->getOrCreateStateSet();
// add end of dynamic draw block to stateset
stateset->setAttribute(new osg::EndOfDynamicDrawBlock());
osg::BeginEndAdapter
: 用于将glBegin
/glEnd
包装在状态对象中。osg::ArrayDispatchers
: 用于将数组数据绑定到几何体对象中。osg::PrimitiveSet
: 用于表示渲染几何体中的每个图元。osg::DrawArrays
: 用于绘制存储在数组中的几何体。osg::DrawElements
: 用于绘制存储在索引数组中的几何体。