osg.PrimitiveRestartIndex 是用于启动原始几何图元重启的索引。在OpenGL中,原始几何图元被定义为点(GL_POINTS)、线(GL_LINES、GL_LINE_STRIP、GL_LINE_LOOP)、三角形(GL_TRIANGLES、GL_TRIANGLE_STRIP、GL_TRIANGLE_FAN)和四边形(GL_QUADS、GL_QUAD_STRIP)。
在某些情况下,您可能需要在渲染原始几何图元时中断当前的渲染,并从顶点缓冲区的下一个索引重新启动渲染。这时就需要使用原始几何图元重启。
在OpenSceneGraph中,可以通过使用 osg.PrimitiveRestartIndex 设置原始几何图元重启的索引。例如,要在三角形带(GL_TRIANGLE_STRIP)之间启用原始几何图元重启,可以按如下方式设置索引值:
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array;
vertices->push_back(osg::Vec3(0.0f, 0.0f, 0.0f));
vertices->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));
vertices->push_back(osg::Vec3(0.0f, 1.0f, 0.0f));
vertices->push_back(osg::Vec3(1.0f, 1.0f, 0.0f));
vertices->push_back(osg::Vec3(0.0f, 2.0f, 0.0f));
vertices->push_back(osg::Vec3(1.0f, 2.0f, 0.0f));
osg::ref_ptr<osg::DrawArrays> drawArrays = new osg::DrawArrays(osg::PrimitiveSet::TRIANGLE_STRIP, 0, 6);
drawArrays->setPrimitiveRestartIndex(0xFFFF);
osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry;
geometry->setVertexArray(vertices.get());
geometry->addPrimitiveSet(drawArrays.get());
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
geode->addDrawable(geometry.get());
在此示例中,将 osg::DrawArrays 对象中的原始几何图元设置为三角带(GL_TRIANGLE_STRIP)。然后调用 setPrimitiveRestartIndex() 方法,将索引值设置为 0xFFFF,最后将 osg::Geometry 对象添加到 osg::Geode 中,完成渲染。
osg.PrimitiveRestartIndex 时,还必须启用OpenGL功能 GL_PRIMITIVE_RESTART,即 glEnable(GL_PRIMITIVE_RESTART),否则无法正常工作