我想获得一个像素的颜色。像素是鼠标位置。我使用glReadPixels
,但我不能
POINT pt;
GetCursorPos(&pt);
unsigned char pixel[3];
glReadPixels(pt.x, pt.y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel);
此代码的像素值为:'Ì'
任何想法?
答案 0 :(得分:4)
204
为CC
。此值通常用于填充未初始化的内存。如果您将零(例如)
pixel
unsigned char pixel[3] = {0};
99,(9)%调用glReadPixels
后你会看到零。取决于documentation glReadPixels
如果生成错误,则不会更改数据内容。
您pixel
中的数据因错误而未更改。关注@ OlegTitov的第四条建议(寻找glGetError();
将告诉你的内容)
更新:如果您想仅使用glReadPixels
从主屏幕获取像素值,并且如果您没有创建任何GLFrameBuffer,我不确定,但我认为你会失败。我会重复 - 我不确定,但我认为,glReadPixels
只能从帧缓冲区读取像素值,这是以前由gl函数创建的
答案 1 :(得分:2)
将char
输出到控制台时,编译器将打印为符号,而不是字母。这样做是为了C风格的字符串可以正常方式打印。要将整数值第一个转换变量打印为整数类型。
从屏幕读取时:请注意,openGL的坐标原点位于左下角,而窗口系统使用左上角,因此您需要将一个坐标系转换为另一个坐标系
glReadPixels(pt.x,window_height - pt.y,1,1,GL_RGB,GL_UNSIGNED_BYTE,pixel);
如果您遇到进一步的问题,请确保将正确的像素缓冲区绑定为读取beffer。对于窗口输出:
glBindFramebuffer(GL_READ_FRAMEBUFFER,0);
如果仍有问题,请使用glGetError();