- OpenGL顶点规范和绘图命令 Vertex Specification and Drawing Commands
- 图元类型 Primitive Types
- 当前顶点属性值 Current Vertex Attribute Values
- 顶点数组 Vertex Arrays
- 通用顶点属性的数组 Specifying Arrays for Generic Vertex Attributes
- 顶点属性除数 Vertex Attribute Divisors
- 使用顶点数组绘制命令 Drawing Commands Using Vertex Arrays
- 条件渲染 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
取值范围是从0
到n-1
,总共有vn+k
个顶点。而k
的取值范围是[0, v-1]
,若k
不为零,则最后的k
个顶点会被忽略不计。这意味着当提供的顶点序列无法整除patch所需的顶点数时,剩余的顶点将不会用于构成有效的patch。 - 通过调用 PatchParameteri 函数并正确设置 PATCH_VERTICES 参数,开发者可以控制图形管线中细分阶段生成几何体的精细程度。
10.1.16 多边形图元的一般考虑
- 根据GL的当前状态,使用
TRIANGLE_FAN
、TRIANGLE_STRIP
、TRIANGLES
、TRIANGLES_ADJACENCY
或TRIANGLE_STRIP_ADJACENCY
模式生成的多边形图元可以以多种方式呈现,例如描边或填充。 - 这些多边形图元的顶点顺序在光栅化(第14.6.1节)和片段着色(第15.2.2节)中具有重要意义。