1.2 关于OpenGL的三种观点
1.2.1 程序员的观点
一般而言,大多数图形应用程序主要包括如下三要素:
(1) 制定绘制对象
(2) 描述对象的属性
(3) 定义这些对象被观察的方式
虽然所有产生图形输入的程序必须包含以上三个要素,如果某个程序是交互式的,它还必须包含一些输入函数。最后,所有的程序必须具有一些针对本地操作系统和窗口环境的初始化和终止的函数。
1.2.2 OpenGL状态机
将OpenGL看做是一个具有输入和输出地状态机。其中输入为几何对象的描述信息和离散对象,它们都是通过OpenGL函数调用来制定的。输出为一个离散图元的集合或构成图像的像素集合。在输入和输出之间,是一台能够获取对象的描述信息、并将这些信息转化为一幅图像的机器。这台机器处理输入的方式取决于其内部状态。于是,OpenGL就具有两种类型的函数,即那些指定输入对象的函数以及那些修改机器状态的函数。
1.2.3 OpenGL绘制流水线
OpenGL的基础是一个所谓的流水线模型(pipeline model)。
顶点→几何处理器(geometry processor)→光栅化器(rasterizer)→片段处理器(fragment processor)→帧缓存(frame buffer)→显示
我们往往需要在流水线体系的高吞吐量和集成依赖于图元间相互关系的全局效果之间做一取舍。
1.3 OpenGL的组成
OpenGL包含200多个函数。依据功能对这些函数进行分类无疑是有意义的。
(1) 图元函数(primitive function)指定要生成屏幕图像的图元。
(2) 属性函数(attribute function)负责控制图元的外观。
(3) 观察函数(viewing function)制定摄像机的属性。
(4) 控制函数(control function)允许我们启用或禁用各种OpenGL特性。
(5) 查询函数(query function)允许我们决定某一特定系统的性能以及OpenGL状态变量的取值。
(6) 输入与窗口函数不属于OpenGL核心库,但是由于它们在交互式程序中的重要地位,这类函数已被包含在GLUT库中。这些函数使我们能够对屏幕中的窗口进行控制并使用鼠标和键盘。