2014-02-06 68 views
0

我想讀取屏幕上繪製的矩形的顏色,但是當我嘗試從座標讀取時,它看起來是從偏移量讀取它,但是此偏移量不一致。 (如果有幫助,我正在使用SDL2庫)我發現它正在反轉座標,例如如果y是0,它實際上是y_Max。glReadPixels正在讀取錯誤的位置

我需要知道如何從正確的座標系中讀取一個像素,我不在乎我使用的是什麼方法,但更快的方法是最優方法。

我不完全理解所有的代碼都在這裏被拋出,我很新的圖像,但我知道我投我的項目矩陣這裏,

glEnable(GL_TEXTURE_2D); 

    GLuint texture; 
    glGenTextures(1, &texture); 
    glBindTexture(GL_TEXTURE_2D, texture); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexImage2D(GL_TEXTURE_2D, 0, image->format->BytesPerPixel, image->w, image->h, 0, GL_RGB, GL_UNSIGNED_BYTE, image->pixels); 

    glOrtho(0.0f, 640.0f, 480.0f, 0.0f, -1.0f, 1.0f); 

,然後在這裏我畫我的矩形。

glColor3f(Chrome[0], Chrome[1], Chrome[2]); 
glTranslatef(0, 0, 0.0f); 
glBindTexture(GL_TEXTURE_2D, texture); 
glBegin(GL_QUADS); 
glTexCoord2f(0.0f, 0.0f); 
glVertex3f(x*128.0f, 0, 0.0f); 
glTexCoord2f(1.0f, 0.0f); 
glVertex3f(128.0f*x+128, 0.0f, 0.0f); 
glTexCoord2f(1.0f, 1.0f); 
glVertex3f(128.0f*x+128, 128.0f, 0.0f); 
glTexCoord2f(0.0f, 1.0f); 
glVertex3f(x*128.0f, 128.0f, 0.0f); 
glEnd(); 
glPopMatrix(); 
            unsigned  char pixel[3]; 
glReadPixels(5, 5, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel); 
std::cout << "R: " << (int)pixel[0] << std::endl; 
std::cout << "G: " << (int)pixel[1] << std::endl; 
std::cout << "B: " << (int)pixel[2] << std::endl; 
std::cout << "X: " << std::endl; 
std::cout << "Y: " << std::endl; 
std::cout << std::endl; 
+1

我們需要知道您的Projection矩陣,以及是否以任何其他方式更改ModelView矩陣? – Vallentin

+0

@Vallentin我編輯了我的代碼,我不改變我的模型查看任何其他方式。 –

+0

你需要在投影模式下運行'glOrtho',你在做什麼?試試這個,'glMatrixMode(GL_PROJECTION); glLoadIdentity();'他們'glOrtho'然後回到ModelView'glMatrixMode(GL_MODELVIEW);'開始繪畫,閱讀等等。 – Dan

回答

1

我不小心倒過來了我的Y值,只是通過在飛機上反轉來固定。例如(ScreenWidth-mouse_y)