0

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

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

在此代码之后像素的值是:'Ì' 有什么想法吗?

4

2 回答 2

4

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

 unsigned char pixel[3] = {0};

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

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

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

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

于 2013-01-29T09:58:48.887 回答
2
  1. 输出char到控制台时,编译器将打印为符号,而不是字母。这是为了 C 风格的字符串可以正常打印。要打印整数值,首先将变量转换为整数类型。

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

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

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

    glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);

  4. 如果仍然有一些问题,请开始检查您的代码glGetError();

于 2013-01-29T08:59:00.433 回答