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