1. 图元装配
在OpenGL渲染中,图形都是由图元组成,顶点数据经由顶点着色器计算处理后,再经过图元装配(Primitive Assembly
),绘制出图形。图元装配过程,其实是根据顶点信息获取构成这个图形所需的图元。
图元 | 描述 |
---|---|
GL_POINTS | 每个顶点在屏幕上都是单独点 |
GL_LINES | 每⼀对顶点定义⼀个线段 |
GL_LINE_STRIP | ⼀个从第⼀个顶点依次经过每⼀个后续顶点⽽绘制的线条 |
GL_LINE_LOOP | 和GL_LINE_STRIP相同,但是最后⼀个顶点和第⼀个顶点连接起来 |
GL_TRIANGLES | 每3个顶点定义⼀个新的三⻆角形 |
GL_TRIANGLE_STRIP | 共⽤⼀个条带(strip)上的顶点的⼀组三角形 |
GL_TRIANGLE_FAN | 以⼀个圆点为中⼼呈扇形排列,共⽤相邻顶点的⼀组三⻆角形 |
OpenGL的基本图元包括:点(Point
)、线(Line
)、三角形(Triangle
)、四边形(Quadrangle
)、多边形(Ploygon
)。图元本质上是将顶点按照一定方式连接构成的,表现效果如下:
可以看到,同一个图形可以分割成不同的图元,图元不同,需要传入的顶点数量也不同。传入的顶点数据越少,顶点着色器需要处理的次数也越少。所以为了更高效地绘制图形,需要选定合适的图元。
2. 环绕⽅式
图元矢量图需要通过光栅化转换成栅格数据,才能用于片元着色器来对像素点进行着色。 对于OpenGL来说,光栅化最欢迎的是三⻆形图元。
在绘制右边的三⻆形时,线条是按照从V0-V1,再到V2,最后再回到V0,这个是沿着顶点顺时针⽅向。这种通过⽅向来指定顶点顺序的⽅式称为环绕。OpenGL默认逆时针⽅向环绕的多边形为正⾯,这就意味着上图左边是正⾯,右边是反⾯。
OpenGL提供了修改正反面绘制的方法,但一般不建议修改:
glFrontFace(GL_CW);
GL_CW:告诉OpenGL顺时针环绕的多边形为正⾯;
GL_CCW:告诉OpenGL逆时针环绕的多边形为正⾯;
3. 点、线的属性设置
- 直接设置点的大小
glPointSize(4.0f);
- 通过使⽤程序点⼤⼩模式来设置点⼤⼩
glEnable(GL_PROGRAM_POINT_SIZE);
gl_PointSize = 5.0;
这种模式下允许我们通过编程在顶点着⾊器或⼏何着⾊器中设置点的大小。
gl_PointSize:着⾊器内建变量
- 设置点的⼤⼩范围和点与点之间的间隔
GLfloat sizes[2] = {2.0f, 4.0f};
GLfloat step = 1.0f;
- 获取点⼤⼩范围和最⼩步⻓
glGetFloatv(GL_POINT_SIZE_RANGE, sizes);
glGetFloatv(GL_POINT_GRAULARITY, &step);
- 设置线段宽度
glLineWidth(2.5f);