2012-12-28 55 views
1

我在創建第二個框時遇到問題。 所以我有一個物體用紋理繪製,它似乎工作正常,但我有一些代碼附加到它,所以如果我按住鼠標左鍵上的第二個框在它的右邊。 取而代之的是第二個盒子沒有成功,而質感的盒子完全沒有了。繪製沒有紋理的第二個對象時出現問題

我覺得我錯過了一些與opengl,就像我必須啓用或禁用之前或之後繪製1的東西。

我的繼承人對OpenGL動初始化代碼:

private static void glInit(){ 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, Display.getWidth(), Display.getHeight(), 0, -1, 1); 
    glMatrixMode(GL_MODELVIEW); 
    glEnable(GL_TEXTURE_2D); 
    glClearColor(0, 0, 0, 1); 
    glDisable(GL_DEPTH_TEST); 

} 

繼承人的代碼,吸引的對象:

public void render(){ 
    if(myImage != null){    
     myImage.bind(); 

     glBegin(GL_QUADS); 
     { 
      // upper left 
      glTexCoord2f(0, 0); 
      glVertex2f(x, y); 
      // upper right 
      glTexCoord2f(1, 0); 
      glVertex2f(x + size, y); 
      // bottom right 
      glTexCoord2f(1, 1); 
      glVertex2f(x + size, y + size); 
      // bottom left 
      glTexCoord2f(0, 1); 
      glVertex2f(x, y + size); 
     } 
     glEnd(); 

    } 

    if(drawChoiceBox){ 
     glColor3f(1, 0, 0); 
     glBegin(GL_QUADS); 
     { 

      glVertex2f(x + size, y - size); 
      glVertex2f(x + size*2, y - size); 
      glVertex2f(x + size*2, y + size*2); 
      glVertex2f(x + size, y + size*2); 
     } 
     glEnd(); 
    } 

} 

我已經測試邏輯歌廳第二框起來,它的作品,所以我猜它一定是我用opengl繪製東西的方式丟失了一些東西。 任何想法什麼我想念?那就是我現在項目中的所有opengl代碼。

+0

所有的代碼,你有這個「初始化」功能實際上屬於繪圖功能。典型的新手誤解,但作爲一個平坦的狀態機,幾乎沒有初始化。相反,當你需要時,你可以在需要之前設置所有狀態。您需要爲對象進行texting→glEnable(GL_TEXTURE_ ...)。你需要* no *紋理→glDisable(GL_TEXTURE_ ...),對於其他任何狀態都是一樣的。在繪圖代碼之外唯一有意義的事情是上傳圖像和幾何數據,即紋理和緩衝對象。 – datenwolf

回答

3

它看起來不像是爲第二個對象禁用紋理,所以它是用紋理繪製的。

同時你的第一個盒子沒有指定glColor(),所以在繪製第二個盒子後,第一個盒子會變成紅色。這可以使其消失,如果通過紅色調製產生黑色,並且啓用調製。

因此,在繪製四邊形時,您應該明確地啓用/禁用紋理,以及指定所有已更改的頂點屬性,例如顏色。

+0

啊我看到了,所以我必須啓用和禁用對象之間的紋理和glcolor。編輯:第二個框現在呈現,但即時通訊不知道如何使用glcolor只是1個對象,谷歌它壽。非常感謝你。 –

+0

是的,如果你的代碼要求它們是特定的值,你必須設置它們 - 否則GL將採用它給出的最後一個值,它在繪製後不會回到某個默認狀態。 (你可能只是想在你的第一個對象之前將顏色設置爲白色 - 'glColor3f(1,1,1);') – JasonD

+0

非常棒的幫助JasonD,非常感謝你 –