OpenGL基本图元

2019-09-26  本文已影响0人  叶子丝
图元 描述
GL_POINTS 每个顶点在屏幕上都是单独点
GL_LINES 每⼀对顶点定义⼀个线段
GL_LINE_STRIP ⼀个从第⼀个顶点依次经过每一个后续顶点而绘制的线条
GL_LINE_LOOP 和GL_LINE_STRIP相同,但是最后⼀个顶点和第⼀个顶点连接起来了.
GL_TRIANGLES 每3个顶点定义⼀个新的三⻆形
GL_TRIANGLE_STRIP 共用⼀个条带(strip)上的顶点的一组三⻆形
GL_TRIANGLE_FAN 以一个圆点为中⼼呈扇形排列,共用相邻顶点的一组三角形
链接方式显示图.png

OpenGL点/线

今天我们将从更底层更基础的角度来详细学习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;
//6. 设置线段宽度
glLineWidth(2.5f);

OpenGL三角形

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


三角形环绕方式.png
glFrontFace(GL_CW);
GL_CW:告诉OpenGL 顺时针环绕的多边形为正⾯;
GL_CCW:告诉OpenGL 逆时针环绕的多边形为正⾯;

OpenGL 三⻆形带

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


三角形带.png

优点:

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

OpenGL 三⻆形扇

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


三角形扇.png

OpenGL⼯具类 GLBatch

GLTools库中包含额一个简单的容器类,叫做GLBatch。这个类可以作为7种图元的简单批次容器使用。而且它知道在使用GL_ ShaderManager 支持的任意存储着色器时如何对图元进行渲染。

1. void GLBatch::Begain(GLeunm primitive,GLuint nVerts,GLuint nTexttureUnints = 0);
参数1:图元
参数2:顶点数
参数3:⼀组或者2组纹理坐标(可选)

2. 复制顶点数据(一个由3分量x,y,z顶点组成的数组) 把顶点复制进去
void GLBatch::CopyVerterxData3f(GLfloat *vVerts);


3. 复制表面法线数据
void GLBatch::CopyNormalDataf(GLfloat *vNorms);

4. 复制颜⾊数据
void GLBatch::CopyColorData4f(GLfloat *vColors);

5. 复制纹理坐标数据
void GLBatch::CopyTexCoordData2f(GLFloat *vTextCoords, GLuint uiTextureLayer);

6. 结束数据复制
void GLBatch::End(void);

7. 绘制图形
void GLBatch::Draw(void);

以上有不正确的地方欢迎留言指出,谢谢。

上一篇下一篇

猜你喜欢

热点阅读