OpenGL顶点规范和绘图命令:图元类型 Primitive Types

在OpenGL中,通过使用DrawArrays或其他在第10.4节中定义的绘图命令,将一系列顶点传递给GL。顶点的数量没有限制,只受限于顶点数组的大小。这些命令的mode参数确定使用这些顶点绘制的图元类型。以下是一些图元类型及其对应的mode参数,以及从多个顶点组装图元时需要的任何额外状态。

10.1.1 点(Points)

  • 使用POINTS模式指定一系列独立的点,每个顶点定义一个独立的点。
  • 点没有特殊的状态,因为每个点都独立于前后的任何点。

10.1.2 线条(Line Strips)

  • 使用LINE_STRIP模式指定一系列相连的线段。
  • 每个线段由两个相邻的顶点定义,其中第一个顶点指定起始点,第二个顶点指定第一个线段的终点和第二个线段的起点。

10.1.3 线环(Line Loops)

  • 使用LINE_LOOP模式指定一个线环,与线条相似,但有一个例外。
  • 最后一个指定的顶点会添加到第一个指定的顶点,形成闭合的线环。

10.1.4 单独的线段(Separate Lines)

  • 使用LINES模式指定独立的线段。
  • 每两个相邻的顶点定义一个线段,如果顶点数量为奇数,最后一个顶点将被忽略。

10.1.6 三角形条带(Triangle Strips)

  • 使用TRIANGLE_STRIP模式指定连接在一起的三角形。
  • 前三个顶点定义第一个三角形,随后的每个顶点都定义一个新的三角形,使用前一个三角形的两个顶点和当前顶点。

10.1.7 三角形扇(Triangle Fans)

  • 使用TRIANGLE_FAN模式指定一个三角形扇,与三角形条带相似,但每个顶点之后的顶点始终替换两个存储的顶点中的第二个顶点。

10.1.8 单独的三角形(Separate Triangles)

  • 使用TRIANGLES模式指定独立的三角形。
  • 每三个相邻的顶点定义一个三角形,如果顶点数量为3n+k(其中n为三角形数量,k为0、1或2),则忽略最后的k个顶点。

10.1.11 带有相邻关系的线段(Lines with Adjacency)

  • 使用LINES_ADJACENCY模式指定带有相邻关系的线段。
  • 对于每个i,从第4i+2个顶点到第4i+3个顶点绘制一条线段,其中有4n+k个顶点。如果k不为零,则忽略最后的k个顶点。

10.1.12 具有相邻关系的线条带(Line Strips with Adjacency)

  • 使用LINE_STRIP_ADJACENCY模式指定带有相邻关系的线条带。
  • 对于每个i,从第i+2个顶点到第i+3个顶点绘制一条线段,其中有n+3个顶点。如果顶点数少于4个,则忽略所有顶点。

10.1.13 具有相邻关系的三角形(Triangles with Adjacency)

  • 使用TRIANGLES_ADJACENCY模式指定具有相邻关系的三角形。
  • 对于每个i,从第6i+1个、第6i+3个和第6i+5个顶点(依次)绘制一个三角形,其中有6n+k个顶点。如果k非零,则忽略最后的k个顶点。

10.1.14 具有相邻关系的三角形条带(Triangle Strips with Adjacency)

  • 使用TRIANGLE_STRIP_ADJACENCY模式指定具有相邻关系的三角形条带。
  • 在三角形条带中,n个三角形绘制,顶点数为2(n+2)+k。如果k为1,则忽略最后一个顶点。

10.1.15 单独的片段(Separate Patches)

  • 使用PATCHES模式指定独立的片段。
  • 一个patch是一个有序的顶点集合,用于进行图元细分处理(在11.2章节详述)。组成patch的顶点之间并没有预设的几何排列顺序;它们被用来传递给细分着色器和固定功能细分器,以便生成新的点、线或三角形等基本图元。
void PatchParameteri( GLenum pname, GLint value );
  • 参数 pname 设置为 GL_PATCH_VERTICES
  • 参数 value 则指定每个patch应该具有的顶点数。例如,如果想要每个patch包含12个顶点来供细分着色器和固定功能细分器使用,那么应传入12作为 value 参数。
  • 对于一系列连续的patch来说,如果单个patch包含的顶点数量由变量 v 表示,则从第 vi+1 个顶点到第 vi+v 个顶点(按顺序排列)将确定第 i 个patch,这里的 i 取值范围是从0n-1,总共有 vn+k 个顶点。而 k 的取值范围是 [0, v-1],若 k 不为零,则最后的 k 个顶点会被忽略不计。这意味着当提供的顶点序列无法整除patch所需的顶点数时,剩余的顶点将不会用于构成有效的patch。
  • 通过调用 PatchParameteri 函数并正确设置 PATCH_VERTICES 参数,开发者可以控制图形管线中细分阶段生成几何体的精细程度。

10.1.16 多边形图元的一般考虑

  • 根据GL的当前状态,使用TRIANGLE_FANTRIANGLE_STRIPTRIANGLESTRIANGLES_ADJACENCYTRIANGLE_STRIP_ADJACENCY模式生成的多边形图元可以以多种方式呈现,例如描边或填充。
  • 这些多边形图元的顶点顺序在光栅化(第14.6.1节)和片段着色(第15.2.2节)中具有重要意义。

相关推荐

  1. OpenGL顶点规范绘图命令类型 Primitive Types

    2024-01-26 18:44:01       32 阅读
  2. 14.4 OpenGL装配光栅化:点

    2024-01-26 18:44:01       27 阅读
  3. 14.5 OpenGL装配光栅化:线段

    2024-01-26 18:44:01       31 阅读
  4. 14.6 OpenGL装配光栅化:多边形

    2024-01-26 18:44:01       27 阅读
  5. 11.1 OpenGL可编程顶点处理:顶点着色器

    2024-01-26 18:44:01       38 阅读
  6. 11 OpenGL可编程顶点处理

    2024-01-26 18:44:01       26 阅读
  7. 【mfc/VS2022】绘图工具设计-绘制基本1

    2024-01-26 18:44:01       36 阅读
  8. 【mfc/VS2022】绘图工具设计-绘制基本2

    2024-01-26 18:44:01       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-26 18:44:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-26 18:44:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-26 18:44:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-26 18:44:01       20 阅读

热门阅读

  1. Win32 MDI 程序学习1

    2024-01-26 18:44:01       33 阅读
  2. 2d关键点可视化 coco转h36m人体关键点

    2024-01-26 18:44:01       35 阅读
  3. 获取Kong

    2024-01-26 18:44:01       32 阅读
  4. 构造函数更改或新增原型链

    2024-01-26 18:44:01       30 阅读
  5. Python中如何向列表中添加元素?

    2024-01-26 18:44:01       36 阅读
  6. 什么是多视角回归?

    2024-01-26 18:44:01       29 阅读
  7. 列举MySQL对于Where子句的优化

    2024-01-26 18:44:01       24 阅读
  8. SQLite 简介

    2024-01-26 18:44:01       31 阅读
  9. Android IdleHandler 接口详解

    2024-01-26 18:44:01       31 阅读
  10. CentOS7 安装JDK、部署Jar包

    2024-01-26 18:44:01       34 阅读
  11. Azure AD 和 Identity Server4 客户端身份验证和授权

    2024-01-26 18:44:01       27 阅读