前言:
GL:OpenGL库
GLU:OpenGL工具函数库
GLUT:OpenGL使用工具库
GL
OpenGL是一个状态机,尤其是如果你使用固定功能的线管。每个状态变量都有一个默认值。在任何时候都可以向系统查询每个状态变量的当前值:
- glGetBooleanv()
- glGetDoublev()
- glGetIntegerv()
- glGetfloatv()
- glGetpointerv()
- glIsEnabled()
GLU
包含了一些函数,它们利用底层的OpenGL函数来执行一些特定的任务,例如设置特定的矩阵,多边分格化以及表面渲染等
GLUT
GLUT(英文全写:OpenGL Utility Toolkit)是一个处理OpenGL程式的工具库,负责处理和底层操作系统的呼叫以及I/O
OpenGl实用工具库是一个独立于窗口系统工具的工具包,它的目的是隐藏不同窗口API所带来的复杂性OpenGL包含了很多的渲染函数,但是它们的设计目的是独立于任何窗口系统或操作系统。因此它们没有包含打开窗口或者从键盘鼠标读取事件的函数。但是绝大多数需要用户的交互。因此,使用GLUT来简化打开窗口,检测输入等任务。
GLUT还包含了一些函数,用于创建一些更为复杂的三维物体,例如球体,圆环面,茶壶,十二面体,圆锥体。
以下是一些小的子集供参考:
- 窗口函数
- glutInit( )
- glutInitDisplayMode( )
- glutInitWindowPosition()
- …
- 显示回调函数
- glutDisplayFunc( )
- 运行程序
- glutMainLoop( ):启动程序。所有已经创建的窗口将会在这时显示,对这些窗口的渲染也开始生效。
main函数
main函数一般由建立OpenGL系统的操作组成。有两种实现方法。
- 第一:通过GLUT创建并设置用于显示的系统窗口。
- 第二:通过定义回调函数,建立事件处理系统。回调函数是事件发生时使用的,并初始化模型与显示环境。(回调函数:就是通过一个函数指针来调用的函数,把函数的指针作为参数传递给另一个函数,我们说这就是回调函数。)
- 回调函数类型
- 初始化函数:doMyinit()
- 改变窗口回调函数:reshape()
- 显示回调函数:display()
- 空闲回调函数:idle()
- display()函数十分重要,它用于创建所定义的模型显示。
GLUT的事件驱动
GLUT完全通过事件来操作。对程序需要处理的每个事件,都需要在main()函数中定义相应的回调函数。
回调函数是当相关事件发生时,系统事件处理程序调用的函数。
主事件循环启动后,改变窗口(reshape)事件生成窗口,显示(display)事件调用自身的回调函数在窗口中绘出初始图像。
如果其他事件也定义了相应的回调函数,则当事件发生时,启动相应回调函数。
回调函数允许用户拖动窗口或改变窗口大小,当用户对窗口进行操作时被调用。
空闲(idle)回调函数在系统空闲时间重新计算图像,并在终端上显示改变的图像。