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的主要内容,如果未能解决你的问题,请参考以下文章