程序源码:
#include <windows.h> //这个必不可少
#include <glut.h>
void Display( void );
int main( int argc, char** argv )
{
glutInit( &argc, argv );//初始化GULT库
glutCreateWindow( "Rect_Draw" );//创建一个顶级窗口,窗口名Rect_Draw
glutDisplayFunc( Display );//用于注册一个绘图函数,这样操作系统在必要时刻就会调用这个显示函数对窗体进行重新绘制操作。
glutMainLoop();//进入GLUT事件处理循环。在一个GLUT程序中,这个例程被调用一次 。一旦被调用,这个程序将永远不会返回 。它将调用必要的任何已注册的回调。
}
void Display( void )
{
glClear( GL_COLOR_BUFFER_BIT );//窗口清除
glBegin( GL_POLYGON );//
glVertex2f( -0.5, -0.5 );//
glVertex2f( -0.5, 0.5 );
glVertex2f( 0.5, 0.5 );
glVertex2f( 0.5, -0.5 );
glEnd();
glFlush();//强制刷新缓冲
}
函数介绍:
(1)void glutInit(int *argcp, char **argv);
作用:用于初始化GULT库,并和窗口系统通信。应在其他GLUT函数和OpenGL函数之前调用。
参数:
argcp 来自主函数的未修改argc指针。
argv 主函数的未修改argc指针。
(2)int glutCreateWindow(char *name);
作用:创建一个顶级窗口。每一个创建了的窗口都有一个唯一相关的OpenGL环境。窗口创建之后,窗口的OpenGL环境状态改变可以很快的完成。
参数:
name ASCII的字符串作为窗口名
注意项:如果没有具体设置,glutCreateWindow将一个窗口以默认尺寸(300X300像素)显示在屏幕的默认位置上(屏幕的左上角)。
(3)voidglutDisplayFunc( void(*func)(void) );
作用:用于注册一个绘图函数,这样操作系统在必要时刻就会调用这个显示函数对窗体进行重新绘制操作。
(4)void glutMainLoop( void )作用:进入GLUT事件处理循环。在一个GLUT程序中,这个例程被调用一次 。一旦被调用,这个程序将永远不会返回 。它将调用必要的任何已注册的回调。
(5)void glClear(GLbitfield mask);
作用:用当前缓冲区清除值,也就是glClearColor或者glClearDepth、glClearIndex、glClearStencil、glClearAccum等函数所指定的值来清除指定的缓冲区,也可以使用glDrawBuffer一次清除多个颜色缓存。
参数:
GLbitfield:可以使用 | 运算符组合不同的缓冲标志位,表明需要清除的缓冲。
GL_COLOR_BUFFER_BIT: 当前可写的颜色缓冲
GL_DEPTH_BUFFER_BIT: 深度缓冲
GL_ACCUM_BUFFER_BIT: 累积缓冲
GL_STENCIL_BUFFER_BIT: 模板缓冲
例子:
glClearColor(0.0,0.0,0.0,0.0); //除颜色设为黑色
glClear(GL_COLOR_BUFFER_BIT);//实际完成了把整个窗口清除为黑色的任务。
(6)void glBegin(GLenum mode)
void glEnd(void)
作用:glBegin和glEnd函数限定了一组或多组图元的定点定义。
参数:
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定义了这个多边形(单个简单填充凸多边形)
(7)void glFlush( void );
作用:用于强制刷新缓冲,保证绘图命令将被执行,而不是存储在缓冲区中等待其他的OpenGL命令。
(8)glVertex4i, glVertex4s, glVertex2dv, glVertex2fv, glVertex2iv, glVertex2sv, glVertex3dv, glVertex3fv, glVertex3iv, glVertex3sv, glVertex4dv, glVertex4fv, glVertex4iv, glVertex4sv
作用:glVertex函数用在glBegin和glEnd之间,除此以外没有意义。用来指定点、线和多边形的顶点。当调用glVertex时,可以为该顶点指定颜色、法线量和纹理坐标。当只指定x,y时,z缺省为0.0,w缺省为1.0;当只指定x、y和z时,w缺省为1.0。