第1章 OpenGL简介
什么是OpenGL
OpenGL是**图形硬件的一种软件接口。**这个接口包含的函数超过700个,可以用于指定物体和操作,创建交互式的三维应用程序。在OpenGL中,程序员必须根据一些为数不多的基本几何图元(如点,直线和多边形)来创建所需要的模型。OpenGL工具库(GLU)提供了许多的建模功能,例如二次曲面以及NURBS曲线和表面。
NURBS曲线和表面
NURBS是Non-Uniform Rational B-Splines的缩写,是非均匀有理B样条的意思。简单地说,NURBS就是专门做曲面物体的一种造型方法。NURBS造型总是由曲线和曲面来定义的,所以要在NURBS表面里生成一条有棱角的边是很困难的。就是因为这一特点,我们可以用它做出各种复杂的曲面造型和表现特殊的效果,如人的皮肤,面貌或流线型的跑车等。
当OpenGL对场景中的图像进行渲染时所执行的主要图形操作:
- 根据几何图元创建形状,从而建立物体的数学描述;
- 在三维空间中排列物体,并选择观察复合场景的有利视角;
- 计算所有物体的颜色。
- 把物体的数学描述以及与物体相关的颜色信息转换为屏幕上的像素;
一个简单的程序
术语:
- 模型(model),由几何图元创建,也称物体(Object)
- 顶点(vertex),用来指定几何图元(点,直线,多边形)
- 渲染(rendering),计算机根据模型创建图像的过程
- 像素(pixel),显示硬件可以在屏幕上显示的最小可视元素
- 位平面(bitplane),和像素有关的信息(像素的颜色)的组织形式,是一块内存区域,保存了屏幕上每个像素的1个位的信息
- 帧缓冲区(framebuffer),保存了图形硬件为了控制屏幕上所有像素的颜色和强度所需要的全部信息
#include<________.h>
main(){
InitializeAWindowPlease();//占位符函数,在屏幕上初始化一个窗口
glClearColor(0.0,0.0,0.0,0.0);//确定了窗口将清除成什么颜色
glClear(GL_COLOR_BUFFER_BIT);//实际执行清除窗口的任务
glColor3f(1.0,1.0,1.0);//确定了绘制物体时所使用的颜色(除非再次调用次函数更改颜色,否则所有绘制都将使用此颜色)
glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);//指定了OpenGL在绘制最终图像时所使用的坐标系统,决定图像如何映射到屏幕上
glBegin(GL_POLYGON);//表示接下来将定义一个要绘制的物体,此处是POLYGON
glVertex3f(0.1,0.1,0.0);//顶点坐标
glVertex3f(0.2,0.1,0.0);
glVertex3f(0.2,0.2,0.0);
glVertex3f(0.1,0.2,0.0);
glEnd();//表示以上定义结束
glFlush();//执行绘图命令(而不是存储在缓冲区等待其他的OpenGL命令)
UpdateTheWindowAndCheckForEvents();//占位符函数,开始进行事件处理
}
OpenGL函数的语法
- OpenGL使用前缀“gl”,并把组成函数的每个单词的首字母用大写形式表示
- OpenGL定义了一些以前缀“GL_”开头的常量,所有的单词都使用大写形式,并以下划线分割
- 例如glColor3f()和glVertex3f()中的“3f"这样的似乎不相关的数字和字母后缀,定义了一个函数的多个不同版本,以便使用不同类型的参数(比如Color函数存在接受3个参数或4个参数的不同版本,以此后缀作为区分)。“3f”表明函数接受“3个”“浮点数”的参数,“2i”表明函数接受“2个”“整型”的参数,其他同理。
- 后缀的字母“v”表示这个函数所接受的参数是一个指向值向量(或数组)的指针,而不是一系列单独的参数。
OpenGL是一个状态机
OpenGL是一个状态机,可以设置它的各种状态(或模式),然后让这些状态一直生效,直到再次修改它们。许多表示模式的状态变量可以用glEnable()和glDisable()函数进行启用和禁用。
OpenGL渲染管线
绝大多数OpenGL实现都有相似的操作顺序,一系列相关的处理阶段叫做OpenGL渲染管线。