OpenGL学习笔记(一)
在看OpenGL红宝书:《OpenGL编程指南》。将一些重点记录下来,方便日后温故知新。
按照书上使用FreeGlut,如何安装freeglut不在此多说。
基本的代码架构如下:
1、加载头文件freeglut.h
这个头文件已经包含了所有opengl相关的头文件,包括gl.h、glu.h。如果是在windows系统下,里面也包含了windows.h
2、初始化相关窗口信息:
glutInit(&argc,argv);//初始化glut
glutInitDisplayMode(unsigned int mode);//指定颜色模式以及使用双缓冲还是单缓冲
glutInitWindowsPosition(int x,int y);//指定窗口左上角在屏幕的位置
glutInitWindowsSize(int width. int size);//指定窗口大小
/*
//not be used
gluInitContextVersion();
glutInitContextFlag();
*/
glutCreateWindow(char *string);//创建窗口
以上便完成了窗口的创建,这和创建windows窗口差不多(不用MFC,直接利用win API),但是跟简单,因为freeglut似乎已经对窗口创建做了一些封装(初学,还不 是很清楚freeglut)。
3、初始化openGL数据
在完成创建窗口之后,一般是一个自定义的init函数,对OpenGL做初始化。注意,之前的窗口创建调用的freeglut工具的接口函数,好比是个容器,现在初始化的才 是openGL的接口。这个根据具体渲染内容和使用方式的不同,会有区别,以后可能会有详细的了解,这里略过。
4、声明回调函数
glutDisplayFunc(void(*func)(void)):这是最基本的回调函数,如果GLUT的窗口内容需要重新显示的话,就要根据铜鼓该函数注册的回调函数执行。也就是说,这 是个执行窗口重绘事件的函数。还可以通过调用函数glutPostRedisplay()进行一次强制性的重绘。
还有几个处理交互事件的函数(openGL是一个API,它本身不提供交互操作,而GLUT为OPENGL扩充了交互操作):
glutReshapeFunc(void(*func)(void)):窗口大小发生改变的时候触发对应回调函数;
glutKeyboardFunc(void(*func)(void)):键盘按键和鼠标操作触发事件;
glutMotionFunc(void(*func)(void):按下鼠标按钮并移动鼠标时触发事件;
glutIdleFunc(void(*func)(void)):没有其他事件执行时,触发该事件,并循环执行对应的回调函数直到有别的事件触发。如果对该函数传参数NULL或者0,则意味着 终止该函数对应的回调函数的执行。也就是说,如果不再次执行该函数,重新注册回调函数,该事件不再被触发。实际使用可以参考书中示例程序1-3(旋转方块动画)。
这些回调函数的声明类似于windows编程的消息机制,如果了解了windows编程的消息机制,就很好理解了。
5、glutMainLoop()
正如这个函数的命名一样,它就是glut的入口函数,在之前的准备工作都做好了之后,调用这个函数,就可以将glut的窗口显示出来。
利用glut进行openGL编程的框架如上所述,我是在window下用VS2005进行编译的。

浙公网安备 33010602011771号