您的位置:首页 > 运维架构

OpenGL系统设计-位图 字体(1)

2009-10-31 19:09 435 查看

位图 字体

OpenGL不仅是一个完整的3D渲染接口,同时也是一个非常高效的图像处理引擎。本章主要讨论OpenGL处理彩色像素和单位图的功能。
OpenGL并不会直接渲染图像,因为图像通常都是以特定的格式存储在文件里面,OpenGL不知道这些图像文件的格式,因此它只知道怎样渲染像素矩形,却不会对图像文件进行解码。如果前面所讲,使用TGA、BMP、JPG文件都需要自己写解码代码。将像素数据解出来后,OpenGL就可以轻而易举的渲染了。
为了支持对像素矩形的渲染,除了基本的点、线、三角形、多边形等几何图元外,OpenGL还支持基于像素的数据类型(pixel-based primitives)。这些基于像素的数据类型包含了每一个像素点的颜色值,可以分为两类:位图(Bitmaps)和图像(Images)。
位图是一位的图像,包含每个像素的一位信息,它可以作为掩码来判断要修改覆盖哪个像素。使用glColor可以设置位图的当前颜色。
图像则包含了每个像素的全部颜色信息,如RGBA值。
当我们将类型BMP、GIF等这样的图像文件数据进行解码得到了相信的颜色信息后,OpenGL就可以对这些颜色值进行光栅化。

如同渲染几何形体有一个流水线一样,像素渲染也有一个操作流水线。首先,从存储区域(如图像文件)读取像素数据,将其处理成OpenGL内部可以使用的格式,期间包括一些颜色变换以及字节交换的操作。然后使用片元操作(Fragment Operation)进行处理,最后将像素数据光栅化,渲染到帧缓冲区。整个流水线如图8-1所示。

图8-1 像素渲染流水线

当然除了将像素数据渲染到帧缓冲区外,也可以将其从帧缓冲区复制到内存,或者变换到纹理映射空间,用于纹理贴图。
为了得到最佳性能,对像素的内部处理应该和硬件相匹配。例如,对于24位的帧缓冲区,8-8-8 RGB格式可能就是最好的匹配,但是10-10-10 RGB格式肯定会出问题。非缺省格式的变换即便成功,速度也会非常慢。

图像的位置是由光栅位置来决定的,它是将图像的左下角映射到空间中的一个点。如同顶点一样,光栅位置也可以变换和裁减。如果光栅位置在裁减检查时失败,那么OpenGL就会取消光栅化操作。

位图的渲染需要使用到的OpenGL命令主要有
glBitmap
glDrawPixels
glReadPixels
glCopyPixels
glCopyTex*Image
glRasterPos

下面我们来对这些常用的命令进行介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: