glReadPixel在我画一个点后不会立即更新。
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_POINTS);
glVertex2f(x,y);
glEnd();
glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel);
printf("after coloring %d %d %dn", (int)pixel[0], (int)pixel[1] , (int)pixel[2]);
pixel[0]
、pixel[1]
和pixel[2]
的值为零,而期望值为255, 0, 0
。帮我解决这个问题:)
这可能是由于许多问题造成的
-
模型到 NDC 空间转换未设置为生成从顶点坐标到像素位置的 1:1 映射
-
您确实尝试设置了这样的变换,但由于舍入误差以及 OpenGL 像素中心有点不直观,您的点最终出现在相邻像素中(它们在数学上是有意义的)
-
读取缓冲区未设置为要绘制到的缓冲区(glDrawBuffer,glReadBuffer)
发布您的完整代码,我们能够重现并进一步帮助您。
看到所有代码,但我想也许问题是你的 x 和 y 在这里是一个浮点值 glVertex2f(x,y);
和 x 和 y 小于 1 但glReadPixels
使用 int 参数,从浮点转换为 int 后,它从我们想要的内容中获取的像素坐标值不正确 阅读信息,所以如果你想使用真实的像素坐标,你可以例如,使用 glOrtho
(您可以在此处找到更多信息)对于窗口高度 = 500 和宽度 = 500:
void Display(void) {
glClear(GL_COLOR_BUFFER_BIT);
//Rectangles();
glMatrixMode(GL_PROJECTION);
glOrtho(0, 500, 0, 500, -1, 1);
// Restore the default matrix mode
glColor3f(1.0f, 0.0f, 0.0f);
float x = 50, y = 50;
unsigned char pixel[3];
glBegin(GL_POINTS);
glVertex2f(x,y);
glEnd();
glMatrixMode(GL_MODELVIEW);
glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel);
printf("after coloring %d %d %dn", (int)pixel[0], (int)pixel[1] , (int)pixel[2]);
glFlush();
}