首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opengl glReadPixels

opengl glReadPixels
EN

Stack Overflow用户
提问于 2013-01-29 15:54:40
回答 2查看 6.9K关注 0票数 0

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

代码语言:javascript
复制
    POINT pt;
    GetCursorPos(&pt);
    unsigned char pixel[3];
    glReadPixels(pt.x, pt.y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel);

在这个编码之后,像素的值是:'Ì',有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-29 17:58:49

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

代码语言:javascript
复制
 unsigned char pixel[3] = {0};

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

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

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

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

票数 4
EN

Stack Overflow用户

发布于 2013-01-29 16:59:00

  1. char输出到控制台时,编译器将打印为符号,而不是字母。这是为可以正常打印的C样式字符串而做的。要打印整数值,首先将变量转换为整型。
  2. 从屏幕读取时:注意openGL的坐标原点是左下角,而窗口系统使用左上角,因此需要从一个坐标系转换到另一个坐标系

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

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

glBindFramebuffer(GL_READ_FRAMEBUFFER,0);

  • 如果仍然有问题,请开始使用glGetError();

检查您的代码

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14578091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档