美文网首页
看图解析:OpenGL“图元”

看图解析:OpenGL“图元”

作者: Hanfank | 来源:发表于2019-05-14 23:48 被阅读0次

    回顾:
    1. 快速理解OpenGL专业名词

    看图解析:OpenGL“图元”

    一、十种图元类型

    OpenGL 中一共有十种基本图元(“元”是基本的意思),每个模型都可以由这十种基本图形组合。

    图元类型
    1. GL_POINTS 单个顶点集(图中未标明)
      将指定的各个顶点用于创建单个的点
    • 线
    1. GL_LINES 多组双顶点线段
      将指定顶点用于创建线段。两个顶点指定一条单独的线段。如果顶点个数是奇数,则忽略最后一个
    2. GL_LINE_STRIP 不闭合折线
      将指定的顶点用于创建线段。每个顶点之后的每个顶点指定的是线条延伸到的下一个点
    3. GL_LINE_LOOP 闭合折线
      特性和GL_LINE_STRIP相似,只不过最后一条线段是在指定的最后一个和第一个顶点之间绘制。典型情况下,这用于绘制那些可能违反了GL_POLYGON用法规则的封闭区域。
    • 三角形
    1. GL_TRIANGLES多组独立填充三角形
      将指定的顶点用于构造三角形。每三个顶点指定一个新三角形。如果顶点个数不是三的倍数,多余的顶点将被忽略。
    2. GL_TRIANGLE_STRIP 线型连续填充三角形
      将指定的顶点用于创建三角形。指定前三个顶点之后,后继的每个顶点与它前面两个顶点一起用于构成下一个三角形。每个顶点三元组(在最初的组之后)会自动重新排列以确保三角形绕法的一致性。
    3. GL_TRAINGLE_FAN扇形连续填充三角形
      将指定的顶点用于构造三角扇形。第一个顶点充当原点,第三个定
    • 多边形
    1. GL_QUADS多组独立填充四边形
      每四个顶点一组用于构造一个四边形。如果顶点个数不是四的倍数,多余的顶点将被忽略
    2. GL_QUADS_STRIP连续填充四边形
      将指定的顶点用于构造四条形边。在第一对顶点之后,每对顶点定义一个四边形。和GL_QUADS的顶点顺序不一样,每对顶点以指定顺序的逆序使用,以便保证绕法的一致。
    3. GL_POLYGON单个简单填充凸多边形
      将指定的顶点用于构造一个凸多边形。多边形的边缘决不能相交。最后一个顶点会自动连接到第一个顶点以确保多边形是封闭的。

    二、图元绘制方向

    • 图元方向默认是逆时针,可以修改为顺时针。
      图元方向默认是逆时针

    三、 简单绘制图形

    • 重点:相同的顶点数,选择不同的绘制方式,产生出不同的图形。
    /* --------------  代码片段 -------------- */
    /// 图元对象
    GLBatch pointBatch; // 点对象
    GLBatch lineBatch; // 两两个点组合线段对象
    GLBatch lineStripBatch; // 开口线段对象
    GLBatch lineLoopBatch; // 闭口线段对象
    void renderScene(void) {
        //定义一些点,类似‘佛罗里达州’地图的形状。
        GLfloat vCoast[24][3] = {
            {2.80, 1.20, 0.0 }, {2.0,  1.20, 0.0 },
            {2.0,  1.08, 0.0 },  {2.0,  1.08, 0.0 },
            {0.0,  0.80, 0.0 },  {-.32, 0.40, 0.0 },
            {-.48, 0.2, 0.0 },   {-.40, 0.0, 0.0 },
            {-.60, -.40, 0.0 },  {-.80, -.80, 0.0 },
            {-.80, -1.4, 0.0 },  {-.40, -1.60, 0.0 },
            {0.0, -1.20, 0.0 },  { .2, -.80, 0.0 },
            {.48, -.40, 0.0 },   {.52, -.20, 0.0 },
            {.48,  .20, 0.0 },   {.80,  .40, 0.0 },
            {1.20, .80, 0.0 },   {1.60, .60, 0.0 },
            {2.0, .60, 0.0 },    {2.2, .80, 0.0 },
            {2.40, 1.0, 0.0 },   {2.80, 1.0, 0.0 }};
        
        //用点(GL_POINTS)的形式--表示‘佛罗里达州’地图的形状
        pointBatch.Begin(GL_POINTS, 24);
        pointBatch.CopyVertexData3f(vCoast);
        pointBatch.End();
        
        //通过线(GL_LINES)的形式--表示‘佛罗里达州’地图的形状
        lineBatch.Begin(GL_LINES, 24);
        lineBatch.CopyVertexData3f(vCoast);
        lineBatch.End();
        
        //通过线段(GL_LINE_STRIP)的形式--表示佛罗里达州的形状
        lineStripBatch.Begin(GL_LINE_STRIP, 24);
        lineStripBatch.CopyVertexData3f(vCoast);
        lineStripBatch.End();
        
        //通过线环(GL_LINE_LOOP)的形式--表示‘佛罗里达州’地图的形状
        lineLoopBatch.Begin(GL_LINE_LOOP, 24);
        lineLoopBatch.CopyVertexData3f(vCoast);
        lineLoopBatch.End();
        // 交换到缓冲区
        glutSwapBuffers();
    }
    /* --------------  代码片段 -------------- */
    

    总结

    1、OpenGL的图元一共有10种,涵盖点—线—面,顶点数相同,不同的方式,绘制的图形不同。
    2、图形绘制是有角度的:默认逆时针,可修改为顺时针

    相关文章

      网友评论

          本文标题:看图解析:OpenGL“图元”

          本文链接:https://www.haomeiwen.com/subject/qjcyaqtx.html