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

本文详细介绍了OpenGL中的顶点规范,包括各种图元类型(如点、线、三角形等)及其对应模式,以及如何使用顶点数组和条件渲染。还探讨了多边形图元的呈现方式,强调了顶点顺序在光栅化和片段着色过程中的重要性。
摘要由CSDN通过智能技术生成
  1. OpenGL顶点规范和绘图命令 Vertex Specification and Drawing Commands
  2. 图元类型 Primitive Types
  3. 当前顶点属性值 Current Vertex Attribute Values
  4. 顶点数组 Vertex Arrays
  5. 通用顶点属性的数组 Specifying Arrays for Generic Vertex Attributes
  6. 顶点属性除数 Vertex Attribute Divisors
  7. 使用顶点数组绘制命令 Drawing Commands Using Vertex Arrays
  8. 条件渲染 Conditional Rendering

在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节)中具有重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值