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进行编译的。

 

posted @ 2013-03-17 22:01  狂天鹤  阅读(553)  评论(0)    收藏  举报