2011-05-10 192 views
2

以下代碼會生成以下圖像。我用於背景的圖像是640 x 480,與displayMode一樣。紋理背景是一個.bmp文件,並加載了Slick紋理加載器。我很困惑,爲什麼它沒有填滿四邊形,爲什麼它被反映出來。 編輯:我的OpenGL場景的背景是粉紅色,你看到的黑色是從創建的四。背景圖像是綠色塊,其上貼有2px淺藍色邊框,並貼有「test」字樣。在OpenGL中使用Ortho2D繪製四邊形問題的紋理問題

private void renderBackground(){ 
    float w = displayMode.getHeight()/2; 
    float h = displayMode.getWidth()/2; 

    GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glPushMatrix(); 

    GL11.glLoadIdentity(); 
    GLU.gluOrtho2D(-w, w, -h, h); 

    GL11.glMatrixMode(GL11.GL_MODELVIEW); 
    GL11.glPushMatrix(); 

    GL11.glLoadIdentity();  
    GL11.glDisable(GL11.GL_DEPTH_TEST); 

    if(useTextures)background.bind(); 
    GL11.glBegin(GL11.GL_QUADS); 

    GL11.glTexCoord2f(0.0f, 0.0f); 
    GL11.glVertex2f(-w,-h); 

    GL11.glTexCoord2f(1.0f, 0.0f); 
    GL11.glVertex2f(w,-h); 

    GL11.glTexCoord2f(1.0f, 1.0f); 
    GL11.glVertex2f(w, h); 

    GL11.glTexCoord2f(0.0f, 1.0f); 
    GL11.glVertex2f(-w, h); 

    GL11.glEnd(); 

    GL11.glEnable(GL11.GL_DEPTH_TEST); 
    GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glPopMatrix(); 
    GL11.glMatrixMode(GL11.GL_MODELVIEW); 
    GL11.glPopMatrix(); 
} 

OpenGL Texture mismapping

現在,當我添加GL11.glTranslatef(20.0f, 20.0f, 0.0f);你會發現,出現粉紅色,這是INT我「initGL」方法創建的顏色: GL11.glClearColor(1.0f, 0.75f, 0.796f, 0.0f);enter image description here

我GL_PROJECTION包含前推下它,當調用renderBackground()時,我的GL_MODELVIEW未被修改。

GL11.glMatrixMode(GL11.GL_PROJECTION); // Select The Projection Matrix 
    GL11.glLoadIdentity(); // Reset The Projection Matrix 

    // Calculate The Aspect Ratio Of The Window 
    GLU.gluPerspective(45.0f, (float) displayMode.getWidth()/(float) displayMode.getHeight(), 0.1f, 25.0f); 
    //position camera 
    GLU.gluLookAt(5.0f, 3.0f, -5.0f, 0.0f, 0.0f, -10.0f, 0.0f, 1.0f, 0.0f); 
    GL11.glMatrixMode(GL11.GL_MODELVIEW); // Select The Modelview Matrix 
+0

「顯示錯誤」:正確的顯示將是...什麼? – genpfault 2011-05-10 02:56:33

+0

對不起,我的錯誤。我期待整個多邊形充滿我的紋理。 – kieve 2011-05-10 02:58:19

+0

它看起來像被填滿。你想讓多邊形填滿整個視口嗎?如果是這樣,在你推動它們之前,你的'GL_PROJECTION'和'GL_MODELVIEW'矩陣的內容是什麼? – genpfault 2011-05-10 02:59:59

回答

3

我需要更多的信息來確定問題,但這裏有一個列表有一些可能性。

1)您正在使用較舊的視頻卡,因爲您正在使用庫來加載紋理,可能正在檢測它,創建兩個圖像的冪,並且不支持2的紋理非功率,並且用黑色填充。 2)您(或您正在使用的某個庫)更改了紋理矩陣堆棧的矩陣,並且它正在更改紋理座標。

3)當你加載紋理時(或者調用庫來做)你做錯了。

我會檢查的第一件事是如果你的顯卡支持2擴展的紋理非功率。您可以在運行時檢查,看how to detect if openGL/card supports non power of 2?

+0

謝謝,事實證明,不支持不是2的冪的紋理。 – kieve 2011-05-10 03:29:17

0

我看到的第一件事,就是你計算

float w = displayMode.getHeight()/2; 
float h = displayMode.getWidth()/2; 

切換?

其次,紋理可以翻轉,因爲加載器翻轉它(當我記得這是發生在我身上,尤其是BMP)。