glReadPixel 不更新该值



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();
    }

相关内容

  • 没有找到相关文章

最新更新