2013-03-13 223 views
1

我一直在做一個非常簡單的遊戲,並且我已經決定包含一些基本的紋理。我正在試驗代碼,出於某種原因,我不知道爲什麼,我無法獲得正確映射的紋理。現在,我只是試圖將一個綠色矩形(512 x 64 .png文件)映射到640 x 480大小的屏幕底部。此綠色矩形應該表示地面。這裏是我的嘗試失敗的圖像: FailureLWJGL混淆紋理映射

這裏是培訓相關代碼:

在我創建了啓動I類調用這個函數:

public void initGL() { 
     GL11.glMatrixMode(GL11.GL_PROJECTION); 
     GL11.glLoadIdentity(); 
     GL11.glOrtho(0, gameWidth, gameHeight, 0, 1, -1); 
     GL11.glMatrixMode(GL11.GL_MODELVIEW); 
     GL11.glEnable(GL11.GL_TEXTURE_2D); 
    } 

在地上類我有創建,我稱之爲繪製函數。該紋理被加載到Boot類中,並設置爲一個受保護的變量,我將其綁定並用在ground.draw()函數中。

public void draw() { 
     this.texture.bind(); 
     GL11.glLoadIdentity(); 
     GL11.glTranslatef(0, 0, 0); 
     GL11.glBegin(GL11.GL_QUADS); 
      GL11.glTexCoord2f(0, 0); 
      GL11.glVertex2f(0, 480 - height); 
      GL11.glTexCoord2f(1, 0); 
      GL11.glVertex2f(640, 480 - height); 
      GL11.glTexCoord2f(1, 1); 
      GL11.glVertex2f(640, 480); 
      GL11.glTexCoord2f(0, 1); 
      GL11.glVertex2f(0, 480); 
     GL11.glEnd(); 
    } 

另外,如果你會注意到上面我有一個GL11.glTranslatef調用。如果我只是將這個函數的第二個參數設置得足夠大,以便在y方向上進一步移位,我可以將我的地面紋理放在正確的位置,但是我不希望這樣做。我真的不知道紋理如何在這個位置結束,我想弄清楚爲什麼。

+0

所以問題是什麼?綠色四邊形的大小是否與您爲四個頂點指定的大小不同? – 2013-03-13 10:33:42

+0

問題是我在上面顯示的第二個代碼塊中的頂點應該(我認爲)映射到窗口底部的一個區域。左上角的點是0,(480 - 高度),其中高度是紋理的高度。接下來是640,480的高度,所以這當然應該是右上角。顯示的接下來的兩個頂點顯然是窗口的左下角和右下角。 – gratsby 2013-03-13 10:49:33

回答

1

我覺得這是你的矩陣一個問題:

GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glLoadIdentity(); 
    GL11.glOrtho(0, gameWidth, gameHeight, 0, 1, -1); 

我從來沒有真正使用的OpenGL固定管線,但我看到什麼,或者實際上DON「T SEE是你乘你的矩陣必須乘模型。用投影矩陣是glOrtho()的四矩陣(glPushMatrix/glPopMatrix)

因此,在你的情況,你應該:

Push Ortho matrix. 
    Push camera(view) matrix (if exists). 
     Push Model Matrix. 

     Pop Model Matrix. 
    Pop camera (view) matrix (if exists). 
Pop Ortho matrix. 

如果O rtho永遠不會改變我認爲你只需要推一次。 此外請確保您考慮到鄰座標變化,因爲取決於glOrtho()設置世界中心將不同於屏幕的中心。通常是左上角或左下角。

底線是:雖然我不建議你使用舊的和過時的OpenGL可言,你應該看看如何轉換完成正確的方式在衆多的網上tutorials。也here