OpenGL-图元装配

什么是图元装配

在绘制阶段,将顶点传入着色器后,这些顶点通过不同的连接方式会形成不同的显示效果,这时候就需要用到图元装配方式来确定最终显示出来的效果。OpenGL中一共提供了10种图元装配方式,平时开发中使用最多的方式为GL_TRIANGLE_FAN。

图元装配种类和效果

图元装配种类 解释
GL_POINTS 点。所有顶点不连接,直接以点的形式显示。
GL_LINES 线。每两个顶点相连接,每个顶点不复用,形成多条线。
GL_LINE_STRIP 线带。每两个顶点相连接,除首、尾顶点外的其他顶点复用,形成不闭合的线带。
GL_LINE_LOOP 线环。每两个顶点相连接,所有顶点可复用,形成闭合的线环。
GL_POLYGON 多边形。所有顶点相连接,形成凸多边形。
GL_TRIANGLES 三角形。每三个顶点相连接,顶点不复用,形成三角形。
GL_TRIANGLE_STRIP 三角形带。每三个顶点相连接,顶点复用,形成三角形带。
GL_TRIANGLE_FAN 三角形扇。以某个顶点作为公用顶点,和其他相邻的两个顶点相连接,组合成多个相邻的三角形,形成三角形扇。
GL_QUADS 四边形。每四个顶点相连接,顶点不复用,形成四边形。
GL_QUAD_STRIP 四边形带。每四个顶点相连接,顶点复用,形成四边形带。

OpenGL-图元装配_第1张图片

代码使用

Begin(GLenum primitive, GLuint nVerts, GLuint nTextureUnits = 0)

通过GLBatch对象调用Begin函数设置图元装配方式。参数primitive为图元装配方式;参数nVerts为顶点个数。参数nTextureUnits为纹理坐标,可选。例如图中GL_POINTS显示效果的代码为:

GLfloat vertexs[18] = {
        1, -1, 0,
        -1, -1, 0,
        -2, 0, 0,
        -1, 1, 0,
        1, 1, 0,
        2, 0, 0
    };
    pointBatch.Begin(GL_POINTS, 18);
    pointBatch.CopyVertexData3f(vertexs);
    pointBatch.End();

注意

  • 当顶点数量和图元装配不匹配时,显示效果会错乱。比如图元装配设置为GL_QUADS,但顶点只有6个,这时候顶点不够用,就只会显示一个四边形,另外两个顶点显示不出来。
  • 顶点顺序不同,显示效果也不相同。
  • 填充颜色为图案的颜色。上图中GL_LINE_LOOP和GL_POLYGON看起来连接方式似乎是一样的,但其实GL_LINE_LOOP的填充颜色是线的颜色;GL_POLYGON的填充颜色是内部封闭空间的颜色。

你可能感兴趣的:(OpenGL,ios)