下图是Linux平台下实现的库组织结构
对于Windows 或 Macintosh平台,也有一张类似的组织结构图。
应用程序既可以使用OpenGL、GLU以及GLX库中的函数,也可以直接使用X库或X工具集中的函数。
另外还有一种折衷的方法是借助GLUT库,这样可以使同一个程序能够在不同的平台下重新编译和运行。
void glutInit(int * argc, char ** argv); //初始化GLUT,应在其他GLUT函数和OpenGL函数之前进行调用。 //glutInit()接收来自main函数的参数,程序可以具体实现相关的方式来使用这些参数
所有的GLUT函数都是以glut为前缀。
函数glutCreateWindow()将一个窗口以默认尺寸(300*300像素)显示在屏幕的默认位置上(屏幕左上角)。该函数的参数使我们可为窗口创建一个标题。
int glutCreatewindow(char * title) //在屏幕上创建一个窗口,该窗口的标题由参数title给出。 //在多窗口情况下,该函数返回一个标识所创建窗口的整数。
下图是带有GLUT的库组织结构:
void glutDisplayFunc(void (*func)(void)) //函数func()在每次需要对窗口重绘时被调用。 void glutMainLoop() //使程序进入无限事件处理循环。该函数的调用应作为main函数最后一条语句出现
提示:GLUT回调函数的形式是固定的。所以,若要在不同的函数之间进行值传播,可能需要借助全局变量。
void glVertex<234><sifd>(type xcoordinate,type ycoordiante,...) void glVertex<234><sifd>(type * coordinates) //指定顶点在二维、三维或思维空间中的位置坐标,坐标值的类型可以是short(s)、int(i)、float(f)或double(d)。 //如果函数名的末尾出现了v,则type为一个指向指定类型的坐标数组的指针。
void glBegin(GLenum mode) //指定mode类型对象的起始点。mode可取GL_POINTS、GL_LINES或GL_POLYGON void glEnd() //指定顶点列表的终止点
提示:在顶点列表的末尾不要忘记包含glEnd()。
void glClear(GLbitfield mask) //清空mask指示的所有缓存的位。 //其中mask可由定义在gl.h中的常量通过逻辑或运算构成。GL_COLOR_BUFFER_BIT指颜色缓存
void glFlush() //强制执行之前缓存的所有OpenGL命令
下面是示例程序:
1 #include <GL/glut.h> 2 void display() //定义了所要绘制的图形实体 3 { 4 glClear(GL_COLOR_BUFFER_BIT); 5 glBegin(GL_POLYGON); 6 glVertex2f(-0.5, -0.5); 7 glVertex2f(-0.5, 0.5); 8 glVertex2f(0.5, 0.5); 9 glVertex2f(0.5, -0.5); 10 glEnd(); 11 glFlush(); 12 } 13 14 int main(int argc, char ** argv) //OpenGL的初始化 15 { 16 glutInit(&argc, argv); 17 glutCreateWindow("simple"); 18 glutDisplayFunc(display); 19 glutMainLoop(); 20 }
运行结果:
注:这才只是刚开始哦。
原文:http://www.cnblogs.com/OctoptusLian/p/6343194.html