2014-09-20 65 views
-1

在我的opengl程序中,我想讓用戶點擊某個鍵時屏幕變成紅色。在我my_keyboard功能,我有以下幾點:Opengl形狀不畫在回調函數

void my_keyboard(unsigned char key, int x, int y) { 
    int feedback_code=0; 
    if (key == 49) { 
     feedback_code=1; 
    } 
    if (feedback_code==1) { 
     flash_screen(); 
    } 

我flash_screen方法如下:

void screen_flash() { 
    float mat[16]; 
    glGetFloatv(GL_MODELVIEW_MATRIX,mat); 

    glColor3f(1.0f,0.0f,0.0f); 

    glBegin(GL_POLYGON); 
    glVertex2f(0.0f, 0.0f); 
    glVertex2f(0.0f, 640.0f); 
    glVertex2f(888.0f, 640.f); 
    glVertex2f(888.0f, 0.0f); 
    glEnd(); 
} 

glGetFloatv電話,我知道我的變換矩陣是回到左下角哪裏它應該是,在(0,0)點。所以繪圖函數應該繪製一個紅色方塊888x640px,這是我窗口的大小。然而,當我運行程序並按下'1'鍵時,我沒有形狀!我使用了斷點並確定了GlBegin-GlEnd語句運行,但它們似乎沒有產生任何東西。

我唯一的其他形狀是在main_loop啓動之前調用的主顯示函數中完成的。

我在做什麼錯?

+0

_「通過glGetFloatv調用,我知道我的變換矩陣回到了它應該在的左下角,在點(0,0)」_這是不正確的。通過'glGetFloatv',您可以將當前的模型視圖矩陣存儲到'mat'中,而不是其他任何東西。你確定你正在設置正確的投影和模型視圖矩陣嗎? – Dan 2014-09-20 00:57:10

+0

如果我的'mat'顯示單位矩陣,這是我想要的這種情況下,這不意味着我當前的轉換矩陣在(0,0)? 根據我在我的主要顯示功能中所做的繪圖,我的投影和模型視圖矩陣是正確的。除非你進入主循環時發生了什麼事情,我不認爲是這樣。 – sven 2014-09-20 01:03:51

回答

1

這是一個常見的新手錯誤。因此,這裏是一般規則:切勿從事件處理程序進行OpenGL繪圖調用。決不!

當您想要屏幕上的某些內容發生與輸入事件相關的反應時,請設置一些標誌變量併發出重繪信號。然後在繪圖函數中根據信號繪製。