OpenGL(五)-OpenGL基本图元

logo.jpg

OpenGL七种基本图元

图元 描述
GL_POINTS 每个顶点在屏幕上都是单独点
GL_LINES 每⼀一对顶点定义⼀一个线段
GL_LINE_STRIP ⼀一个从第⼀一个顶点依次经过每⼀一个后续顶点而绘制的线条
GL_LINE_LOOP 和GL_LINE_STRIP相同,但是最后⼀一个顶点和第⼀一个顶点连接起来了了.
GL_TRIANGLES 每3个顶点定义⼀一个新的三⻆角形
GL_TRIANGLE_STRIP 共⽤用⼀一个条带(strip)上的顶点的⼀一组三⻆角形
GL_TRIANGLE_FAN 以⼀一个圆点为中⼼心呈扇形排列列,共⽤用相邻顶点的⼀一组三⻆角形

OpenGL基本图元实例

u.png

OpenGL点/线

1.最简单、最常用的,表示点的大小

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_SIZE_GRANULARITY,&step);

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

 glEnable(GL_PROGRAM_POINT_SIZE);

5.这种模式下允许我们通过编程在顶点着⾊器或几何着⾊器中设置点大小。着色器内建变量:gl_PointSize,并且可以在着⾊器源码直接写.

gl_PointSize = 5.0

6.设置线段的宽度

glLineWidth(2.5f);

OpenGL三角形

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

5.png

OpenGL三角形环绕方式

2.png

在绘制第⼀个三⻆形时,线条是按照从V0-V1,再到V2。最后再回到V0的一个闭合三⻆角形。 这个是沿着顶点顺时针方向。这种顺序与⽅向结合来指定顶点的方式称为环绕。
在默认情况下,OpenGL 认为具有逆时针方向环绕的多边形为正面. 这就意味着上图左边是正面,右边是反⾯.

glFrontFace(GL_CW);

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

OpenGL 三⻆角形带

对于很多表⾯或者形状⽽言,我们会需要绘制⼏个相连的三角形. 我们可以使⽤GL_TRIANGLE_STRIP 图元绘制⼀串相连的三角形,从而节省大量的时间.

3.png

优点:

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

OpenGL 三⻆角形扇

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

4.png

OpenGL ⼯工具类 GLBatch

void GLBatch::Begain(GLeunm primitive,GLuint nVerts,GLuint nTexttureUnints = 0);

参数1:图元
参数2:顶点数
参数3:1组或者2组纹理坐标(可选)

void GLBatch::CopyVerterxData3f(GLfloat *vVerts);

复制顶点数据(⼀个由3分量x,y,z顶点组成的数组)

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);

绘制图形

你可能感兴趣的:(OpenGL(五)-OpenGL基本图元)