第一章 GL函数:
glClear(GLbitfield mask) -- 清除viewport的缓冲区
可以使用 | 运算符组合不同的缓冲标志位,表明需要清除的缓冲,例如glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)表示要清除颜色缓冲以及深度缓冲,可以使用以下标志位
-
GL_COLOR_BUFFER_BIT: 颜色缓冲
-
GL_DEPTH_BUFFER_BIT: 深度缓冲
-
GL_ACCUM_BUFFER_BIT: 累积缓冲
-
GL_STENCIL_BUFFER_BIT: 模板缓冲
glColor3f(GLfloat red,GLfloat green,GLfloat blue) -- 设置当前颜色
glColor3f(1.0, 0.0, 0.0); //设置当前色为红色
glColor3f(0.0, 1.0, 0.0); //设置当前色为绿色
glBegin(GLenummode) && glEnd(void)
函数限定了一组或多组图元的定点定义
mode:创建图元的类型。可以是以下数值
-
GL_POINTS:把每一个顶点作为一个点进行处理,顶点n即定义了点n,共绘制N个点
-
GL_LINES:把每一个顶点作为一个独立的线段,顶点2n-1和2n之间共定义了n条线段,总共绘制N/2条线段
-
GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个顶点定义了线段n,总共绘制n-1条线段
-
GL_LINE_LOOP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,然后最后一个顶点和第一个顶点相连,第n和n+1个顶点定义了线段n,总共绘制n条线段
-
GL_TRIANGLES:把每个顶点作为一个独立的三角形,顶点3n-2、3n-1和3n定义了第n个三角形,总共绘制N/3个三角形
-
GL_TRIANGLE_STRIP:绘制一组相连的三角形,对于奇数n,顶点n、n+1和n+2定义了第n个三角形;对于偶数n,顶点n+1、n和n+2定义了第n个三角形,总共绘制N-2个三角形
-
GL_TRIANGLE_FAN:绘制一组相连的三角形,三角形是由第一个顶点及其后给定的顶点确定,顶点1、n+1和n+2定义了第n个三角形,总共绘制N-2个三角形
-
GL_QUADS:绘制由四个顶点组成的一组单独的四边形。顶点4n-3、4n-2、4n-1和4n定义了第n个四边形。总共绘制N/4个四边形
-
GL_QUAD_STRIP:绘制一组相连的四边形。每个四边形是由一对顶点及其后给定的一对顶点共同确定的。顶点2n-1、2n、2n+2和2n+1定义了第n个四边形,总共绘制N/2-1个四边形
-
GL_POLYGON:绘制一个凸多边形。顶点1到n定义了这个多边形。
glVertex3f(GLfloat x,GLfloat y,GLfloat z) -- 画顶点
glVertex3f(0.25, 0.25, 0.0);
glFlush(void) -- 强制刷新缓冲,保证图形命令被执行,而不是留在缓冲区中等待其他OpenGL命令
简单地说glFlush()就是强制刷新,OpenGL是使用一条渲染管线线性处理命令的,一般情况下,我们提交给OpenGL的指令并不是马上送到驱动程序里执行的,而是放到一个缓冲区里面,等这个缓冲区满了再一次过发到驱动程序里执行;很多时候只有几条指令是填充不满那个缓冲区的,就是说这些指令根本没有被发送到驱动里,所以我们要调用glFlush来强制把这些指令送到驱动里进行处理。
glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha) -- 使用红,绿,蓝以及AFA值来清除颜色缓冲区的,并且都被归一化在(0,1)之间的值,其实就是清空当前的所有颜色。
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(mode) -- 指定哪一个矩阵是当前矩阵
glMatrixMode设置当前矩阵模式:
-
GL_MODELVIEW,对模型视景矩阵堆栈应用随后的矩阵操作.
-
GL_PROJECTION,对投影矩阵应用随后的矩阵操作.、
-
GL_TEXTURE,对纹理矩阵堆栈应用随后的矩阵操作.
与glLoadIdentity()一同使用
glLoadIdentity(void) -- 重置当前指定的矩阵为单位矩阵.在语义上,其等同于用单位矩阵调用glLoadMatrix
根据矩阵变换本质的理解,glLoadIdentity并不是简单的理解为将坐标归为世界坐标的原点。而是每次建立顶点的时候,都是以当前物体的中心作为世界的原点的(换句话说,也就是上一轮物体变换之后,原点的位置作为新的物体的中心)。之后再进行各种变换而形成物体的移动、缩放、旋转等效果。从本质上讲,glLoadIdentity并不会改变世界坐标的原点位置,而仅仅是让“栈顶矩阵归位”。但它导致了下一轮顶点变换时,感觉上是以新的物体中心为世界原点的效果!
glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far) -- 这个函数描述了一个平行修剪空间
这种投影意味着离观察者较远的对象看上去不会变小(与透视投影相反)。在3D笛卡尔坐标中想象这个修剪空间,左边和右边是最小和最大的X值,下边和上边是最小和最大的Y值,近处和远处是最小和最大的Z值。 正射投影,又叫平行投影。这种投影的视景体是一个矩形的平行管道,也就是一个长方体。正射投影的最大一个特点是无论物体距离相机多远,投影后的物体大小尺寸不变。这种投影通常用在建筑蓝图绘制和计算机辅助设计等方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确。
glShadeModel(GLenum mode) -- 设置着色模式
mode:
-
GL_SMOOTH : 在使用光滑着色时(即GL_SMOOTH),独立的处理图元中各个顶点的颜色。对于线段图元,线段上各点的颜色将根据两个顶点的颜色通过插值得到。对于多边形图元,多边形内部区域的颜色将根据所有顶点的颜色插值得到
-
GL_FLAT : 采用恒定着色时(即GL_FLAT),使用图元中某个顶点的颜色来渲染整个图元
glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) -- 使用一个旋转矩阵乘以当前矩阵