2016-03-07 82 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(); 
    }