OpenGL像素阵列函数

Posted clairvoyant

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL像素阵列函数相关的知识,希望对你有一定的参考价值。

OpenGL中有两个函数可用于定义矩阵阵列的形状图案。一个是位图,另一个是像素图。

一、OpenGL位图函数

void glBitmap(GLsizei width,  GLsizei height,  GLfloat xorig,  GLfloat yorig,  GLfloat xmove,  GLfloat ymove,  const GLubyte * bitmap);

函数中的参数width和height分别给出阵列bitmap的列数和行数。bitmap的每一元赋值为0或1。值为1表示对应像素用前面设定的颜色显示;否则,对应像素不受该位图影响。参数xorig和yorig定义了矩形阵列“原点”的位置。原点位置指定为bitmap的左下角,而xorig和yorig可正可负。另外,需要指定帧缓存中应用图案的位置(当前光栅位置),而位图在将原点置于当前光栅位置后显示。赋给xmove和ymove的值用作位图显示后更新帧缓存当前光栅位置的坐标位移。

glRasterPos*()可设定当前光栅位置,参数和后缀码与glVertex*()函数中的一样。

1 GLubyte bitmap[20] = {
2     0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 
3     0xff,  0x80, 0x7f,  0x00, 0x3e, 0x00, 0x1c, 0x00, 0x08, 0x00};
4 glPixelStorei(GL_UNPACK_ALLGNMENT, 1);
5 
6 glRasterPos2i(30, 40);
7 glBitmap(9, 10, 0.0, 0.0, 20.0, 15.0, bitmap);

bitmap的阵列值从矩形网格的底部开始逐行指定。glPixelStorei设定位图的存储模式,第二个参数为1表明数据值用字节边界对齐。

二、OpenGL像素图函数

void glDrawPixels(GLsizei  width,  GLsizei  height,  GLenum  format,  GLenum  type,  const GLvoid *  data);

将彩色阵列定义的图案应用到一块帧缓存的像素位置。参数width和height分别给出像素位图data的列数和行数。参数format用一个OpenGL常量赋值,指出如何为阵列指定值。如,GL_BULE可指定全部像素为蓝色,GL_BRG可按蓝、红、绿依次指定颜色分量。参数type设定为OpenGL常量GL_BYTE、GL_INT和GL_FLOAT。

OpenGL提供若干个缓存,将某缓存选为glDrawPixel的目标即可将一个阵列送进缓存。有的缓存存放颜色值,有的存放另外的像素数据。例如,深度缓存用来存放对象离开观察位置的距离,而模板缓存用来存放场景的边界图案。glDrawPixels中的format参数可设定为GL_DEFTH_COMPONENT或GL_STENCIL_INDEX分别对应两种缓存模式。

OpenGL有4个颜色缓存用于屏幕刷新。两个颜色缓存用于立体显示中的左、右两个场景。对于立体显示缓存中的每一个,有用于动画显示的前~后一对双缓存。在OpenGL的特殊实现中,立体显示或双缓存之一、或者二者都得不到支持。若立体显示或双缓存都不支持,则仅有单一的刷新缓存用作前~左颜色缓存。这是在双缓存无效时的默认缓存。若双缓存有效,默认是后~左和后~右缓存或仅仅是后~左缓存,取决于立体观察的当前状态。

glDrawBuffer(buffer)可选择一个颜色的辅助或混合缓存来存储像素图。多种OpenGL符号常量可赋值给参数buffer,以指定一个或多个“绘图”缓存。例如,GL_FRONT_LEFT、GL_FRONT_RIGHT、GL_BACK_LEFT、GL_BACK_RIGHT来选定单一的缓存。使用GL_FRONT来选择两个前缓存,GL_BACK来选择两个后缓存。类似的,GL_LEFT或GL_RIGHT指定一对左缓存或一对右缓存,并且可以使用GL_FRONT_AND_BACK来选择所以可能的颜色缓存。辅助缓存通过常量GL_AUXk来选择,其中k是从0到3的整数,某些OpenGL实现中有多于4个辅助缓存。

以上是关于OpenGL像素阵列函数的主要内容,如果未能解决你的问题,请参考以下文章

计算机图形学输出图元_14_OpenGL像素阵列函数_1_位图函数

纹理中的 OpenGL 片段着色器

Opengl,仅当目标像素的 alpha 值为正时才混合

尝试为opengl创建像素化着色器失败

OpenGL、GLSL 片段着色器无法读取 Sampler2D 纹理

在片段着色器中绘制别名像素完美线?