OpenGL光栅操作
除了将像素阵列存入缓存,我们可以从缓存中取出一块值或将一块值复制到另一缓存区域。可 以对像素阵列执行各种其他操作。一般情况下,术语光栅操作(raster operation)用于描述以某种 方式处理一个像素阵列的任何功能。将一个像素阵列的值从一个位置移到另一位置的光栅操作也称 为像素值的bitblt移动(bit-block transfer ),尤其是在该功能由硬件实现时。在多层次的系统中,术 语pixblt用于块移动。
使用下列函数可在指定缓存中选择一个矩形块的像素值:
使用函数:
使用下面的函数可将一块像素数据从OpenGL缓存的一个位置复制到另一个位置:
glDrawBuffer命令选择。提供和接受复制的两个区域都必须在屏幕坐标的边界内。
为了实现用glDrawPixels或glCopyPixels将一块像素值放入缓存的不同效果,我们可以使用各 种方式将取出的值与缓存原来的值进行组合。例如,可使用与(and )、或(or)和异或(exclusive or ) 等逻辑操作来组合两个块的像素值。在OpenGL中,可以使用下面的函数来选择按位逻辑操作,以 组合取来的和目标的像素颜色值:
还有一些OpenGL子程序用来管理由glDrawPixels、glReadPixels和glCopyPixels等函数处理的 像素阵列。例如,glPixelTransfer和glPixelMap子程序可用来移动或调整颜色值、深度值或模板值。 我们在以后几章中讲解计算机图形软件包的其他方面时再讨论像素操作。
除了将像素阵列存入缓存,我们可以从缓存中取出一块值或将一块值复制到另一缓存区域。可 以对像素阵列执行各种其他操作。一般情况下,术语光栅操作(raster operation)用于描述以某种 方式处理一个像素阵列的任何功能。将一个像素阵列的值从一个位置移到另一位置的光栅操作也称 为像素值的bitblt移动(bit-block transfer ),尤其是在该功能由硬件实现时。在多层次的系统中,术 语pixblt用于块移动。
使用下列函数可在指定缓存中选择一个矩形块的像素值:
glReadPixels (xmin, ymin, width, height, dataFormat, dataType, array);
要提取的矩形块的左下角是屏幕坐标位置(xmin, ymin)。参数width ,height , dataFormat和dataType
与glDrawPixels子程序中的相同。存入参数array中的数据类型依赖于选择的缓存。我们可通过给
参数dataFormat赋值GL_DEPTH_COMPONENT或GL_STENCIL_INDEX来选择深度缓存或模板缓存。
使用函数:
glReadBuffer (buffer);
可以为glReadPixels子程序选择颜色或辅助缓存的特殊组合。指定一个或多个缓存的符号常量与
glDrawBuffer子程序中的一样,但不能选择所有四个颜色缓存。默认选择是由立体观察状态所确定
的前左_前右缓存组合或仅仅是前左缓存。
使用下面的函数可将一块像素数据从OpenGL缓存的一个位置复制到另一个位置:
glCopyPixels (xmin, ymin, width, height, pixelValues);
块的左下角是屏幕坐标位置(xmin, ymin),参数width和height被赋以正整数,分别指出要复制的列
数和行数。参数pixelValues被赋以GL_COLOR、GL_DEPTH或GL_STENCIL来指定要复制的数据
种类:颜色值、深度值或模板值。一块像素值从源缓存(source buffer)复制到目标缓存(destination
buffer),其左下角映射到当前光栅位置。源缓存用glReadBuffer命令选择,而目标缓存用
glDrawBuffer命令选择。提供和接受复制的两个区域都必须在屏幕坐标的边界内。
为了实现用glDrawPixels或glCopyPixels将一块像素值放入缓存的不同效果,我们可以使用各 种方式将取出的值与缓存原来的值进行组合。例如,可使用与(and )、或(or)和异或(exclusive or ) 等逻辑操作来组合两个块的像素值。在OpenGL中,可以使用下面的函数来选择按位逻辑操作,以 组合取来的和目标的像素颜色值:
glEnable (GL_COLOR_LOGIC_OP);
glLogicOp (logicOp);
参数logicOp可被赋以多种符号常量,包括GL_AND、GL_OR和GL_XOR。另外,取来的和
目标的位值可以颠倒(即0和1互换)。使用常量GL_COPY_INVERTED可将取来的颜色位值颠倒
后再取代目标值。使用GL_INVERT则仅仅颠倒了目标位值而不使用取来的值。各种颠倒操作还
可与逻辑与、或以及异或操作进行组合。其他操作包括将目标位清0(GL_CLEAR),或设定所有
的目标位为1( GL_SET )。glLogicOp子程序的默认值是GL_COPY,简单地用取来的值去替代目
标值。
还有一些OpenGL子程序用来管理由glDrawPixels、glReadPixels和glCopyPixels等函数处理的 像素阵列。例如,glPixelTransfer和glPixelMap子程序可用来移动或调整颜色值、深度值或模板值。 我们在以后几章中讲解计算机图形软件包的其他方面时再讨论像素操作。