glReadPixels没有更新值

时间:2016-03-07 02:55:30

标签: c++ c opengl graphics

一旦我画了一个点,glReadPixels就没有得到更新。

  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 %d\n", (int)pixel[0], (int)pixel[1] , (int)pixel[2]);

pixel[0]pixel[1]pixel[2]的值在预期值为255, 0, 0时为零。帮我解决这个问题:)

2 个答案:

答案 0 :(得分:1)

这可能是由于许多问题所致

  • 模型到NDC空间转换未设置为从顶点坐标到像素位置生成1:1映射

  • 您确实尝试设置了这样的转换,但是由于舍入错误以及OpenGL像素中心有点不直观(它们在数学上有意义),您的点最终会出现在邻居像素中

  • 读取缓冲区未设置为您要绘制的缓冲区(glDrawBuffer,glReadBuffer)

发布您的完整代码,我们可以重现并帮助您。

答案 1 :(得分:0)

我没有看到所有代码,但我想也许问题是你的x和y它在这里是浮点值glVertex2f(x,y);而x和y小于1但是{{1}使用int参数并从float转换为int后,我们想要读取信息的像素坐标值不正确,所以如果你想使用真实像素坐标你可以使用glReadPixels(更多信息)你可以在here中找到例如window heigh = 500和width = 500:

glOrtho