GLint iPixel = 0; glReadBuffer(GL_FRONT); glReadPixels(xi, point.y, 1, 1, GL_RED, GL_UNSIGNED_INT, &iPixel);//读取一点的红色通道值 cerr < < iPixel; 我这样写输出的不对,总是0,还要什么设置么?glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 这个也设置了int main(int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(640, 480); glutInitWindowPosition(100, 150); glutCreateWindow("my first attempt"); glutDisplayFunc(myDisplay); myInit(); glutMainLoop(); return 0;}void myInit(void){ glClearColor(1.0, 1.0, 1.0, 0.0); glPointSize(1.0);//设置点的大小为一个像素 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, 640.0, 0.0, 480.0);}void myDisplay(void){ glClear(GL_COLOR_BUFFER_BIT); DrawRegion(); RegionFill(); glFlush();}我犯了这个错误 GL_INVALID_OPERATION is generated if glReadPixels is executed between the execution of glBegin and the corresponding execution of glEnd.谢谢指导,现在读取的数值还是不对,我设置背景是白色的,然后就画了几条线组成的区域,但我读取没在线上的点的数值也是0,这个值有时候还会有231这数字
一个一个像素的读写太慢了吧, opengl只支持一堆像素的读写。void glReadPixels();glDrawPixels();当然你用他们来读写一个像素也可以.只不过有点大材小用void glReadPixels(GLint x,GLint y,GLsizesi width,GLsizei height, GLenum format,GLenum type,GLvoid *pixel); 函数参数(x, y)定义图像区域左下角点的坐标,width和height分别是图像的高度和宽度,*pixel是一个指针,指向存储图像数据的数组。参数format指出所读象素数据元素的格式(索引值或R、G、B、A值,如下面表所示),而参数type指出每个元素的数据类型(也见下面表)。 写入象素数据: void glDrawPixels(GLsizesi width,GLsizei height,GLenum format, GLenum type,GLvoid *pixel); 函数参数format和type与glReadPixels()有相同的意义,pixel指向的数组包含所要画的象素数据。注意,调用这个函数前必须先设置当前光栅位置,若当前光栅位置无效,则给出该函数时不画任何图形,并且当前光栅位置仍然保持无效。+++++++++++像素格式表++++++++++++++++++++++GL_INDEX 单个颜色索引 GL_RGB 先是红色分量,再是绿色分量,然后是蓝色分量 GL_RED 单个红色分量 GL_GREEN 单个绿色分量 GL_BLUE 单个蓝色分量 GL_ALPHA 单个Alpha值 GL_LUMINANCE_ALPHA 先是亮度分量,然后是Alpha值 GL_STENCIL_INDEX 单个的模板索引 GL_DEPTH_COMPONENT 单个深度分量 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 数据类型+++++++++++++++++++ GL_UNSIGNED_BYTE 无符号的8位整数 GL_BYTE 8位整数 GL_BITMAP 无符号的8位整数数组中的单个数位 GL_UNSIGNED_SHORT 无符号的16位整数 GL_SHORT 16位整数 GL_UNSIGNED_INT 无符号的32位整数 GL_INT 32位整数 GL_FLOAT 单精度浮点数 +++++++++++++++++++++++++++++++++++++++ 图像的每个元素按上面表给出的数据类型存储。若元素表示连续的值,如红、绿、蓝或亮度分量,每个值都按比例放缩使之适合于可用的位数。例如,红色分量是0.0到1.0之 间的浮点值。若它需要放到无符号单字节整数中,也仅有8位精度保存下来,其他无符号整数类型同理。对于有符号的数据类型还要少一位,例如颜色索引存到有符号的8位整数中,它的第一位被0xfe屏蔽掉了(即这个掩码包含7个1)。若类型是GL_FLOAT,索引值简单地转化成单精度浮点值,例如索引17转化成17.0,同理。
建议你检查一下glReadPixels的返回值 你给的代码比较少,没办法保证前面的代码没问题 int ret=glGetError(); cout<<ret<<endl; 我要看看这个ret的值 不好意思,打错了===============================gl.h里面有定义#define GL_NO_ERROR 0#define GL_INVALID_ENUM 0x0500#define GL_INVALID_VALUE 0x0501#define GL_INVALID_OPERATION 0x0502#define GL_STACK_OVERFLOW 0x0503#define GL_STACK_UNDERFLOW 0x0504#define GL_OUT_OF_MEMORY 0x0505你的绘图操作会改变缓冲区的颜色的嘛;