一、openGL中,定义了10种图元:GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP, GL_POLYGON
十种图元的作用比较简单,就不多介绍。
二、OSG中图元的设置是通过
bool addPrimitiveSet(PrimitiveSet* primitiveset);
所有图元类都继承于PrimitiveSet,不同的图元类可以以不同的方式解释顶点数组(不仅仅是OpenGL的那些方式)
四、osg::DrawArrays
五、osg::DrawElementsUInt
此类依赖两个东西解释顶点数组,第一个当然是顶点数组了,第二个是个索引数组。索引数组是什么呢?举个例子。
有如下两个三角形(ABC)(BCD),如果想以GL_TRIANGLES方式绘制,如果用DrawArrays,就要往顶点数组中插6个顶点ABCBCD,如果三角面巨多,有这么多重复顶点是不可接受的。而使用osg::DrawElementsUInt可以解决此问题。
DrawElementsUInt接受一个索引数组IndexArray,是对顶点数组的索引,如此顶点数组中就可以只放ABCD四个顶点,而索引数组为(123234)6个数字,这样存储代价就小了许多。
DrawElemetnsUInt(osg::PrimitiveSet::TRIANGLES, IndexArray->size(), &IndexArray->front())