想学OpenGL,先把这些概念搞清楚,搞不清楚,你根本无从下手,边学边更新。

**模型(model):**或者叫场景对象,就是根据几何图元创建的物体。

**渲染(render):**就是计算机根据模型创建最终图像的过程。

**着色器(shader):**图形硬件(显卡)设备所执行的一类特殊函数。打个比方说,画画的时候我们经常有这么一个过程,先用铅笔打线稿,再上色。着色器就是这个工作过程。着色器通常分两种: (1)顶点着色器(vertex shader)这个是告诉电脑如何打线稿的——如何处理顶点、法线等的数据的函数。 (2)片面着色器(fragment shader)这个是告诉电脑如何上色的——如何处理光、阴影、遮挡、环境等等对物体表面的影响,最终生成一副图像的小函数。

**光栅化(Rasterize):**是把顶点数据转换为片元的过程,具有将图转化为一个个栅格组成的图象的作用,特点是每个元素对应帧缓冲区中的一像素。就是把矢量图形转化成像素点儿的过程。我们屏幕上显示的画面都是由像素组成,而三维物体都是点线面构成的。要让点线面,变成能在屏幕上显示的像素,就需要Rasterize这个过程。

**渲染管线:**他是一系列处理过程,并将应用程序的数据转换到最终渲染的图像,说白了,就是流水线,来吧,我按流水线一步步处理。

**顶点(vertexs):**点是一切的基础。OpenGL提供了一系列函数画一个点。

**图元(primitives):**点、线、面等,采用glPointSize(), glLineWidth(), glLineStipple()和 glPolygonStipple()函数可以选择图元的光栅化维数和模式。另外,还可以用glCullFace(), glFrontFace()和glPolygonMode()控制多边形正反面不同的光栅化效果。

**片元(fragments,又叫片断):**图元被适当的裁剪,颜色和纹理数据也相应作出必要的调整,相关的坐标被转换为窗口坐标。最后,光栅化将裁剪好的图元转换为片元

**像素:**就是屏幕可刷出的像素点,有几个函数实现象素保存和转换。函数glPixelStore系列函数用于内存中的象素是如何保存的。glPixelTransfer系列函数 and glPixelMap系列函数用于象素在写入帧缓冲区前是如何处理的。glDrawPixels()定义了一个象素矩形。用glPixelZoom()实现象素的缩放。

**顶点、图元、片元的关系:**几何顶点被组合为图元(点,线段或多边形),然后图元被合成片元,最后片元被转换为帧缓存中的像素数据。图元被适当的裁剪,颜色和纹理数据也相应作出必要的调整,相关的坐标被转换为窗口坐标。最后,光栅化将裁剪好的图元转换为片元。

**裁剪:**进行修修补补,在裁剪时点,线段和多边形处理略微不同。对于点,要么保留原始状态(在裁剪体内部),要么被裁掉(在裁剪体外部)。对于线段和多边形来说,如果部分在裁剪体外部,则需要在裁剪点生成新的几何顶点。对于多边形,还需要在新增的顶点间增加完整的边。不论裁剪了线段还是多边形,都需要给新增几何点赋予边界标志、法线、颜色和纹理坐标信息。

**位图:**位图是具有特定片元模式的0和1的矩形。每个片元有相同的相关数据。可以用glBitmap()定义。

**纹理存储:**纹理贴图是将指定的部分纹理图象映射到每个图元上。每个片元(fragment)具有的纹理坐标属性,该坐标与纹理图象坐标对应,得到纹理图象该位置的颜色值来修改片元的RGBA颜色,从而完成这个映射过程。

**雾:**已经光栅化的片元具有纹理贴图修正后颜色,可以采用融合因子再融合雾颜色,该融合因子大小根据视点和片元间的距离来定。