OpenGL是图形硬件的一种软件接口(API),包括了大约250个函数,利用这些函数可以指定物体和操作,创建交互性应用程序。它的设计目标就是作为一种流线型、独立于硬件的接口,在不同的硬件平台上实现。
OpenGL对屏幕上的图像进行渲染主要执行以下操作:
- 根据几何图元创建形状,建立物体的数学描述(OpenGL把点、直线、多边形、图像和位图作为基本图元);
- 在三维空间中排列物体,选择观察场景的有利视角;
- 计算所有物体的颜色,影响颜色的因素包括指定颜色,光照条件,纹理贴图等;
- 将物体及其颜色转换为屏幕像素(这个过程称为光栅化);
基本概念
渲染是计算机根据模型创建图像的过程。
模型是根据几何图元构造的,几何图元包括点、直线和多边形,他们是通过顶点(vertex)指定的。
像素是屏幕上放置的最小可视元素,像素最终构成屏幕上的渲染图像。
位平面是像素信息在内存中的组织形式,它是一块内存区域,保存了像素的1个位的信息。
帧缓冲区由位平面组织而成,保存了控制屏幕所有像素的颜色和强度信息。
OpenGL是一个状态机,设置它的各种状态,若不修改则这些状态将一直生效。这次状态变量包括控制当前视图和投影变换、直线和多边形点画模式、多边形绘图模式、光照位置、物体材料属性等。
OpenGL渲染管线
几何数据经理的阶段包括求值器和顶点操作,而像素数据处理过程有所不同。这张图对OpenGL的渲染步骤有一个整体描述,不再细述。
一些相关函数
OpenGL工具函数库(GLU)利用低层函数执行诸如特定视图定向和投影设置矩阵等任务;
所有窗口系统都提供了一个函数库,对窗口系统功能进行扩展,比如WGL函数对应着Windows到OpenGL的接口;
OpenGL使用工具包(GLUT)是一个独立于窗口系统的工具包,因此不同窗口系统API的复杂性。主要包括以下一些函数:
- glutInit(int *argc, char **argv),对GLUT进行初始化,处理所有命令行参数;
- glutInitDisplayMode(unsigned int mode),指定使用RGBA还是颜色索引模式,单缓冲还是双缓冲,相关联的缓冲区等;
- glutInitWindowPosition(int x, int y)指定窗口左上角的位置;
- glutInitWindowSize(int width, int size)指定窗口大小;
- int glutCreateWindow(char *string)创建一个带有OpenGL渲染环节的窗口,为新窗口返回一个唯一的标识符;
- glutDisplayFunc(* func)(voide)),一个事件回调函数,当GLUT确定一个窗口内容需要重新显示时,便会调用注册的那个函数;
- glutMainLoop(),进入主循环;
- glutReshapeFunc(void(* func) int w, int h))表示当窗口大小发生变化时应采取什么行动;
- glutKeyboardFunc(void(* func)(unsigned char key, int x, int y)),glutMouseFunc(void (*func)(int button, int state, int x, int y))挂接键盘和鼠标事件;
- glutMotionFunc(void(* func)(int x, int y)),注册一个函数,当鼠标按钮按下并移动鼠标时调用函数;
- glutIdleFunc(void(*func)(void)),注册一个函数,如果不存在其他尚未处理的事件时就执行这个函数;