OpenGL的基本图元

在OpenGL中,基本图元是构建更复杂图形的基础。以下是OpenGL中常见的基本图元:

点(Point): 表示一个二维或三维空间中的单个点,可以通过指定点的坐标来创建点。
线(Line): 由两个点之间的直线段组成。可以通过指定线的两个端点的坐标来创建线。
三角形(Triangle): 由三个非共线点组成的封闭图形。三角形是最基本的二维图形,也是构建复杂图形的基础。通过指定三个顶点的坐标来创建三角形。
四边形(Quadrilateral): 由四个顶点组成的封闭图形。OpenGL的四边形仅在OpenGL 3.0支持,之后版本移除了四边形的支持。OpenGL中的四边形通常被拆分为两个三角形来处理。

点(Point)

点(Point)的基本图元只有GL_POINTS一种。
points

线(Line)

根据顶点流连接方式的不同,线(Line)可以分为三种基本图元:

  • GL_LINES 每一对顶点分别定义成⼀条线段,比如顶点0和顶点1定义成一条线段,顶点2和顶点3定义成一条线段等等。如果提供的顶点是奇数个顶点,最后多余的那一个顶点将被忽略。
  • GL_LINE_STRIP 从第一个顶点依次经过的每⼀个后续顶点都连接起来组成一条条线段。如果传入n个顶点,那么将得到n-1条线段。如果只传入1个顶点,绘制指令会被忽略。
  • GL_LINE_LOOP 前面和GL_LINE_STRIP一样,从第一个顶点依次经过的每⼀个后续顶点都连接起来组成一条条线段,不一样的地方是,最后一个顶点和第一个顶点连成一条线段。如果传入n个顶点,将得到n条线段。如果只传入1个顶点,绘制指令会被忽略。第一个顶点和最后一个顶点的线段的绘制放在前面线段绘制完成的后面。

GL_LINES

GL_LINE_STRIP

GL_LINE_LOOP

三角形(Triangle)

三角形是二维图形中使用最少顶点的图元,三角形只需要三个顶点就能确定一个平面。根据顶点流连接方式的不同,三角形(Triangle)可以分为三种基本图元:

  • GL_TRIANGLES 每3个顶点定义⼀个新的三⻆形, 比如顶点0、顶点1、顶点2组成一个三角形,顶点3、顶点4、顶点5组成一个新的三角形等等。
  • GL_TRIANGLE_STRIP 每3个相邻的顶点组成一个新的三角形,比如顶点0、顶点1、顶点2组成一个三角形,顶点1、顶点2、顶点3组成一个新的三角形等等。
  • GL_TRIANGLE_FAN 第一个顶点固定,之后每两个相邻的顶点与第一个顶点组成一个三角形。这样就形成了一个以第一个顶点为中⼼呈扇形排列的一组三角形。

GL_TRIANGLES

GL_TRIANGLE_STRIP

GL_TRIANGLE_FAN

四边形(Quadrilateral)

四边形仅在OpenGL 3.0支持,之后版本移除了四边形的支持,请不要使用。

OpenGL三角形环绕方式

如下图,在绘制第一个三⻆角形时,线条是按照从V0-V1,再到V2。最后再回到V0的一个闭合三⻆角形。 这个是沿着顶点顺时针⽅方向。这种顺序与方向结合来指定顶点的⽅式称为环绕。

glFrontFace

在默认情况下,OpenGL认为具有逆时针方向环绕的多边形为正面,那么逆时针方向环绕的多边形为反面. 所以默认情况下上图左边是正面,右边是反面。

正面和反面是用于表面渲染和面向性的概念。它们与图元的顶点顺序和面法线有关。根据正面和反面的定义,OpenGL可以进行一些优化,例如背面剔除(Backface Culling),即不绘制被认为是反面的多边形,以提高性能。

然而,可以通过修改OpenGL的渲染状态来改变正面和反面的定义。例如,可以使用glFrontFace函数指定顶点的顺序来改变面的方向,或者使用glCullFace函数来更改剔除面的设置。

我们可以通过glFrontFace(GL_CW);
GL_CW:告诉OpenGL 顺时针环绕的多边形为正⾯面; 
GL_CCW:告诉OpenGL 逆时针环绕的多边形为正⾯面;

参考文档:
1、《Primitive》https://www.khronos.org/opengl/wiki/Primitive

分类: 音视频开发 标签: OpenGL

评论

暂无评论数据

暂无评论数据

目录