opengl glReadPixels

时间:2013-01-29 07:54:40

标签: c++ opengl

我想获得一个像素的颜色。像素是鼠标位置。我使用glReadPixels,但我不能

    POINT pt;
    GetCursorPos(&pt);
    unsigned char pixel[3];
    glReadPixels(pt.x, pt.y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel);

此代码的像素值为:'Ì' 任何想法?

2 个答案:

答案 0 :(得分:4)

十六进制表示中的

204CC。此值通常用于填充未初始化的内存。如果您将零(例如)

初始化pixel
 unsigned char pixel[3] = {0};

99,(9)%调用glReadPixels后你会看到零。取决于documentation glReadPixels

  

如果生成错误,则不会更改数据内容。

pixel中的数据因错误而未更改。关注@ OlegTitov的第四条建议(寻找glGetError();将告诉你的内容)

更新:如果您想仅使用glReadPixels从主屏幕获取像素值,并且如果您没有创建任何GLFrameBuffer,我不确定,但我认为你会失败。我会重复 - 我不确定,但我认为,glReadPixels只能从帧缓冲区读取像素值,这是以前由gl函数创建的

答案 1 :(得分:2)

  1. char输出到控制台时,编译器将打印为符号,而不是字母。这样做是为了C风格的字符串可以正常方式打印。要将整数值第一个转换变量打印为整数类型。

  2. 从屏幕读取时:请注意,openGL的坐标原点位于左下角,而窗口系统使用左上角,因此您需要将一个坐标系转换为另一个坐标系

    glReadPixels(pt.x,window_height - pt.y,1,1,GL_RGB,GL_UNSIGNED_BYTE,pixel);

  3. 如果您遇到进一步的问题,请确保将正确的像素缓冲区绑定为读取beffer。对于窗口输出:

    glBindFramebuffer(GL_READ_FRAMEBUFFER,0);

  4. 如果仍有问题,请使用glGetError();

  5. 开始检查您的代码