2016-03-07 86 views
-1

glReadPixels在我画一个点时没有更新。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。帮我解决此问题:)

+0

您能否显示像素的类型? – lnman

+0

像素应该是咬的类型你确定你的声明中有正确的类型吗? –

+0

你确定你的'x,y'对应屏幕'(0,0)'?记住变换矩阵......屏幕左上角是图像原点,那么您的点在那里呈现? – Spektre

回答

1

这可能是由于一些问题

  • 模型NDC空间变换没有设置产生1:从顶点坐标像素位置

    1映射
  • 你曾尝试建立这种转变,但你的点在相邻像素结束了,由于舍入误差,因为OpenGL的像素中心是一种直观(它们是有意义的,数学)

  • 读取缓冲区未设置为你绘制到缓冲区(glDrawBuffer,glReadBuffer)

安置自己的完整的代码,我们能够再现,并进一步帮助您。

0

我没有看到所有的代码,但我认为可能的问题是,你的x和y这是一个浮点值在这里glVertex2f(x,y); x和y小于1但glReadPixels与int参数一起工作并且在从float转换为int如果想要使用真实像素坐标,您可以使用glOrtho(更多信息,请参阅here),例如对于窗口高度= 500和宽度= 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 %d\n", (int)pixel[0], (int)pixel[1] , (int)pixel[2]); 
     glFlush(); 
    }