OpenGL是个跨平台的针对硬件的编程语言。Core库函数一般以gl开头,OpenGL Utiliy Library函数一般以glu开头,常量以GL_开头,函数结尾可以以数目和数据类型结尾(如glColor3f(0.3,0.3,0.3,1))。
状态机
OpenGL是个状态机,它的状态和模式一直有效,直到被改变。它的状态可以用glEnable()、glDisable()来开启和关闭。状态的保存和恢复,可以用glPushAttrib() 和glPopAttrib()来实现。
glBegin()和glEnd()
OpenGL的元素绘制,用glBegin()和glEnd()来指定用到的顶点。如下面所示。
glBegin(GL_TRIANGLES);
glColor3f(1, 0, 0); // set vertex color to red
glVertex3fv(v1); // draw a triangle with v1, v2, v3
glVertex3fv(v2);
glVertex3fv(v3);
glEnd();
OpenGL可以绘制的元素有10种:GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP, and GL_POLYGON。在glBegin()和glEnd()之间,只有部分命令可以用,如这些:glVertex*(), glColor*(), glNormal*(), glTexCoord*(), glMaterial*(), glCallList()。
glFlush()和glFinish()
一般OpenGL命令不会立即执行,一般会存在buffer中,直到buffer满之后在一次发送出去执行,如网络的buffer或者图形加速器自己的buffer。
使用glFlush()可以一次性将buffer里的命令发送出去执行,而不必等buffer满。glFlush()会立即返回,不必等之前的OpenGL命令执行完。
glFinish()也是一次性将buffer里的命令发送出去执行,但它不会立即返回,而是等前面的OpenGL命令执行完才返回,这可以用来测命令执行的时间消耗。