看图解析:OpenGL“图元”

您所在的位置:网站首页 基本线段是什么意思 看图解析:OpenGL“图元”

看图解析:OpenGL“图元”

2024-04-26 16:07| 来源: 网络整理| 查看: 265

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

看图解析:OpenGL“图元” 一、十种图元类型

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

图元类型

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3