OpenGL学习(六) 离散图元

位图

    位图的显示,下面这段代码将显示一个8*8的棋盘:

    	GLubyte wb[2]={0x00,0xff};
	GLubyte check[64*8];
	for(int i=0;i<64;i++)
		for(int j=0;j<8;j++)
			check[i*8+j]=wb[(i/8+j)%2];
	
	glBitmap(64,64,0,0,220.0,220.0,check);

wKioL1QFg__Bxp0fAACqcedUSYo765.jpg

    

    void glBitmap(GLsizei width,GLsizei height,GLfloat x0,GLfloat y0,GLfloat xi,

                   GLfloat yi,GLubyte* bits)

    //依据数组bits绘制一副宽为width,高位height的位图。位图的起始位置到当前光栅位置的偏移量为x0,y0,当位图显示完毕后,当前位置则以xi和yi作为坐标增量而增加

    void glRasterPos*() 设置光栅位置

    

    注:调用该函数后,光栅颜色就被锁定,后面再调用glColor对位图绘制颜色不起作用。


绘制模式

    在绘制像素时,如果想要绘制的像素位置已经有像素存在,则可令目标像素的新值为源颜色和目标颜色按照某种规则运算的结果。运算可借助一下函数设置:

    void glLogicOp(GLenum op)

    //如果逻辑运算(GL_COLOR_LOGIC_OP)被启用,该函数可用来整合到帧缓存中的源像素和目标像素之间采用16中逻辑运算中的哪一种。参数值可以使GL_COPY(默认)、GL_OR、或GL_XOR

    必须通过如下函数来启用逻辑运算

    glEnable(GL_COLOR_LOGIC_OP)


像素的读写

    像素的写操作:

    void glDrawPixels(GLsizei w,GLsizei h,GLenum format,GLenum type,GLvoid* array)

    //该函数依据数组array,在当前光删除绘制出一个w*h的像素矩阵。像素格式被指定为format,像素数据的类型被指定为type,format可以为GL_RED、GL_BLUE、GL_GREEN


像素的读取

    void glReadPixels(GLint x,GLint y,GLsizei w,GLsizei h,GLenum format,

                      GLenum type,GLvoid* array)

    //该函数从缓存中的位置(x,y)开始将一个w*h的像素矩阵块读进数组array中。像素的格式被指定为format,写入数组的类型为type。


像素的复制

    void glCopyPixels(GLint x,GLint y,GLsizei w,GLsizei h,GLenum buffer)

    //将函数从帧缓存中的(x,y)开始,将一个w*h的像素快复制到当前光栅位置处。


缓存的选择

    在对RGBA值进行读写操作时,实际上是在与帧缓存中的一个颜色缓存打交道。在但缓存模式下,用于读/写的默认缓存为前台颜色缓存(GL_FRONT).在双缓存模式下,则为后台缓存(GL_BACK)。

    但是OpenGL还有许多其他的缓存,通过以下函数可以选择对哪个缓存进行操作。

    void glReadBuffer(GLenum buffer)

    //选择要进行读取操作的缓存。

    void glDrawBuffer(GLenum buffer)

    //选择要进行绘制的目标缓存

    

像素存储模式

    在系统内存和帧缓存之间的数据的移动有可能正确,也可能不正确,这取决于用户的系统。问题在于OpenGL可能需要一些关于字节如何在处理器内存中组织的附加信息。OpenGL提供如下函数允许程序针对图像数据在处理器中的存储形式做出调整。

     void glPixelStore<fd>(GLenum param,type value)

     //将像素存储模式参数param设为value


像素的缩放

    void glPixelZoom(GLfloat sx,GLfloat sy)  

    //该函数在像素被绘制时依据比例因子sx和sy将像素放大或缩放。若比例因子为负,则图像除了要进行比例缩放,还要沿着响应的方向翻转。像素的缩放不适用位图。


    void gluScaleImage(GLenum format,GLint win,GLint hin,GLenum typein,void* imagein,

                        GLint wout,GLint hout,GLenum typeout,void* imageout)

    //该函数接收一副win*hin的图像imagein,其格式为format,类型为type,并生成一副大小为wout*hout,格式为format且类型为typeout的图像imageout。

    

你可能感兴趣的:(像素,OpenGL,位图)