(五)OpenGL 几何图元类型

1,694 阅读2分钟

OpenGL几何图元类型

geometric.png

OpenGL几何图元的名称及含义

Alicncncom.png

  • OpenGL 点/线

1.最简单也是最常⽤的 4.0f,表示点的⼤小

glPointSize(4.0f); 

2.设置点的大⼩范围和点与点之间的间隔

GLfloat sizes[2] = {2.0f,4.0f};
GLfloat step = 1.0f;

3.获取点⼤小范围和最⼩步⻓

glGetFloatv(GL_POINT_SIZE_RANGE ,sizes);
glGetFloatv(GL_POINT_GRAULARITY ,&step);

4.通过使用程序点大⼩模式来设置点大小

glEnable(GL_PROGRAM_POINT_SIZE);

5.这种模式下允许我们通过编程在顶点着⾊器或几何着⾊器中设置点大小。着⾊器内建变量:

gl_PointSize,并且可以在着色器源码直接写
gl_PointSize = 5.0
  1. 设置线段宽度
 glLineWidth(2.5f);
  • OpenGL 三⻆形

对于OpenGL 光栅化最欢迎的是三角形的3个顶点就能构成一个三角形. 三角形类型来自于顶点.并不是所有的三⻆形都是正三角形。

WechatIMG23.png

  • OpenGL 三角形环绕⽅式

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

surround.png

在默认情况下,OpenGL 认为具有逆时针⽅向环绕的多边形为正⾯. 这就意味着上图左边是正面,右边是反面.

glFrontFace(GL_CW);

GL_CW:告诉OpenGL 顺时针环绕的多边形为正⾯; GL_CCW:告诉OpenGL 逆时针环绕的多边形为正面;

  • OpenGL 三角形带

对于很多表面或者形状而言,我们会需要绘制几个相连的三角形. 这是我们可以使用GL_TRIANGLE_STRIP 图元绘制一串串相连三角形,从而节省大量的时间.

strip.png
优点:

  1. 用前3个顶点指定第1个三角形之后,对于接下来的每⼀个三⻆形,只需 要再指定1个顶点。需要绘制⼤量的三角形时,采用这种方法可以节省⼤量的程序代码和数据存储空间 2.提供运算性能和节省带宽。更少的顶点意味着数据从内存传输到图形卡 的速度更快,并且顶点着色器需要处理的次数也更少了。
  • OpenGL 三角形扇

对于很多表面或者形状而言,我们会需要绘制几个相连的三角形. 这时我们可以使用GL_TRIANGLE_FAN 图元绘制一组围绕一个中心点相连的三角形

fan.png

GLBatch:是在GLTools中包含的一个简单容器类.

void GLBatchBegain(GLeunm primitive,GLuint nVerts,GLuint nTexttureUnints = 0);
参数1:图元
参数2:顶点数 参数3:⼀一组或者2组纹理理坐标(可选)
//复制顶点数据(⼀一个由3分量量x,y,z顶点组成的数组) void GLBatch.CopyVerterxData3f(GLfloat *vVerts);
//复制表⾯面法线数据
void GLBatch.CopyNormalDataf(GLfloat *vNorms);
//复制颜色数据
void GLBatch.CopyColorData4f(GLfloat *vColors);
//复制纹理坐标数据
void GLBatch.CopyTexCoordData2f(GLFloat *vTextCoords, GLuint uiTextureLayer);
//结束数据复制
void GLBatch.End(void);
//绘制图形
void GLBatch.Draw(void);