2013-04-08 39 views
2

當glDrawPixels()與glRasterPos2 *()和glPixelZoom()組合使用時,我得到了非常奇怪的結果。我有一張照片,我想展示它,就像過去使用的舊幀緩衝器,即(0,0)處於頂部的角落。下面的代碼:當使用glDrawPixels時顛倒圖片

void GLWidget::resizeGL(int w, int h) 
{ 
    glViewport(0, 0, w, h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, w, 0, h, -1, 1); 
} 

void GLWidget::paintGL() 
{ 
    for(int i = 0; i < SCREEN_WIDTH; ++i) 
    { 
     displayBitmap[i] = 0xf81f; 
    } 

    for(int i = 239 * SCREEN_WIDTH; i < 239 * SCREEN_WIDTH + SCREEN_WIDTH; ++i) 
    { 
     displayBitmap[i] = 0xf800; 
    } 

    //glRasterPos2f(0, SCREEN_HEIGHT - 0.1); 
    glRasterPos2i(0, SCREEN_HEIGHT - 1); 
    glPixelZoom(1, -1); 
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
    glDrawPixels(SCREEN_WIDTH, SCREEN_HEIGHT, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, displayBitmap); 
} 

如果執行,因爲它是現在,我得到的紫線(0,1),即一個黑線,那麼紫線,然後,在看不見的底部區域,是紅線。

OK,所以我改變

glRasterPos2i(0, SCREEN_HEIGHT - 1); 

glRasterPos2i(0, SCREEN_HEIGHT); 

不,輸出已損壞。奇怪的是,如果我將其更改爲:

glRasterPos2f(0, SCREEN_HEIGHT - 0.1); 

它的作品,無論是畫線,以正確的順序(SCREEN_HEIGHT和SCREEN_HEIGHT - 1.0導致同樣的結果作爲整數版本)。

我在做什麼錯在這裏? SCREEN_WIDTH = 320,SCREEN_HEIGHT = 240.

回答

3

glDrawPixels僅在消費級硬件上得不到很好的支持。而在較新的OpenGL版本中,它已被完全刪除。與其花時間試圖讓它起作用,只需將圖像加載到紋理中,然後用一個平凡的着色器繪製帶紋理的四邊形。

相信我,搞亂glDrawPixels是不值得的。

+2

我不知道。你能否給我一個例子說明如何以你描述的方式來做到這一點?我在OpenGL方面經驗不足 – 2013-04-08 12:13:22

2

這個工作對我來說:

void display() { 
unsigned char *pixels=captureScreenRegion(0,0,window_width,window_height); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glRasterPos2f(-1,1); 
glPixelZoom(1, -1); 
glDrawPixels(window_width,window_height,GL_RGB,GL_BYTE,pixels); 
free(pixels); 
glutSwapBuffers(); 
} 
1

我遇到同樣的問題,因爲你做的。我解決了它這種方式:

void VideoRenderWidget::resizeGL(int w, int h) 
{ 
    glViewport(0, 0, w, h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, w, 0, h, 0.1, 1); 
    glPixelZoom(1, -1); 
    glRasterPos3f(0, h - 1, -0.3); 
} 

void VideoRenderWidget::paintGL() 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glDrawPixels(704, 576, GL_RGB, GL_UNSIGNED_BYTE, buffer_.data_); 
} 


這爲我工作..我還在發展這個..這裏704是視頻的寬度和576的高度。