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

关于openGL中glReadPixels接口的一点使用心得

2016-03-25 16:28 1041 查看
今天使用glReadPixels接口想要获取下opengl画出画面,保存成BMP图片,结果由于学艺不精,花费了好多时间,特此记录下:

首先介绍下glReadPixels的参数,该接口有7个参数
void glReadPixels(  GLint x,
GLint y,
GLsizei width,
GLsizei height,
GLenum format,
GLenum type,
GLvoid * data);


前两个 x, y是描画的图像的左下角的坐标,具体说来,就是相对显示窗的左下角为(0,0)原点的坐标点,如果想截取整个opengl显示窗口,取0,0即可,不是opengl描画坐标系的原点值。

width和height这两个值代表你要截屏的范围,一般选择整个显示窗口的大小。这两个值如果错了,会导致你截出来的图片有重复或者尺寸有问题

format和type

format指的是opengl中像素存储的格式,一般有:

GL_ALPHA

GL_RGB

GL_RGBA

这个比较简单,主要是问你你到底想要color framebuffer中的哪些数据,可以只要alpha,或者rgb或者RGBA都要

type这个值要和format匹配上,GL_UNSIGNED_BYTE,0-255内

GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_4_4_4_4, or GL_UNSIGNED_SHORT_5_5_5_1,这个每一个通道的范围在0-2n次方的范围内,这里需要注意,format和type需要匹配,你可以去查询当前opengl支持的匹配的两者值是多少,查询方法如下:

glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE,&eReadType);

glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT,&eReadFormat);

这两个接口可以查询匹配的format和type值

最后一个参数是图像数据存放的指针,保证分配的空间够大,不要越界就好
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opengl 图片 bmp