opengl glReadPixels

Posted

技术标签:

【中文标题】opengl glReadPixels【英文标题】: 【发布时间】:2013-01-29 07:54:40 【问题描述】:

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

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

此代码后像素值为:'Ì' 有什么想法吗?

【问题讨论】:

真正的问题是什么? 所以您将像素打印到控制台...嗯? 感谢您的回复。我想在像素数组中存储一个位置(例如 50*50)的 rgb 颜色。我在visual studio 2010的断点处看到了像素数组的值。 Visual Studio 是否将unsigned char 值显示为字符?因为它会这样做。 我想在 PIXEL 数组中设置鼠标位置的 rgb 颜色。例如,通过移动我的鼠标,pixels[0][0][0] 的值必须更改(0 到 255),但它始终为 204。我的鼠标移动不会更改此值 【参考方案1】:

204 是十六进制表示的CC。该值通常用于填充未初始化的内存。如果您将 pixel 初始化为零(例如)

 unsigned char pixel[3] = 0;

99,(9)% 调用glReadPixels 后您将看到零。取决于documentationglReadPixels

如果产生错误,数据内容不会改变。

那是您在pixel 中的数据没有因为错误而改变。遵循@OlegTitov 的第四条建议(看看glGetError(); 会告诉你什么)

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

【讨论】:

谢谢。你是对的unsigned char pixel[3] = 0;。但我不明白如何解决这个问题? glGetError(); 返回错误 1282 无效操作。这是什么意思? 这里 - opengl.org/sdk/docs/man/xhtml/glGetError.xml - 是所有错误的描述,可以glGetError() 产生。从那里寻找每个常数的值,你会得到答案【参考方案2】:

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

    从屏幕读取时:注意openGL的坐标原点在左下角,而窗口系统使用左上角,所以需要从一个坐标系转换到另一个坐标系

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

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

    glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);

    如果仍有问题,请使用glGetError();开始检查您的代码

【讨论】:

以上是关于opengl glReadPixels的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL ES 2.x 与 OpenGL 兼容

glfw 包含了opengl吗

OpenGL ES 与 OpenGL [关闭]

qt opengl的图形怎么刷新

OpenGL是啥?

将 OpenGL ES 2 移植到 OpenGL