美文网首页
看图解析: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