2015-08-23 155 views
1

我不知道我是不是在這裏看到的東西。我一直在努力嘗試使它運作很長時間。我之前使用過精靈表和紋理座標 - 所以我對它們很熟悉。紋理座標無法正常工作?

我有一個9x9的精靈圖(如圖所示)。它是一個等軸精靈圖(因爲我有等角拼圖)。總的圖像爲1152 X 576

我計算出,基於該尺寸,每個瓦片的寬度爲128個像素且高度爲64

圖像的百分比每一瓦片佔用是0.111 (長度方向和高度方面[128/1152 | 64/576])。

但是,我的代碼無法正常工作。

的代碼和tilesheet圖片:http://i.imgur.com/JU4YYaB.png

原始代碼:

@Override 
public void drawTile(int tileX, int tileY, Texture atlas) { 

    int tileXcoord, tileYcoord; 

    tileXcoord = (tileX - tileY) * (TILE_XHALF); 
    tileYcoord = (tileX + tileY) * (TILE_YHALF); 

    atlas.bind(); 


    //GL11.glColor3f(Red, Green, Blue); 

    GL11.glBegin(GL11.GL_QUADS); 
    { 
     setTextureCoordinates(1); 
     GL11.glVertex2f(tileXcoord, tileYcoord); 
     setTextureCoordinates(2); 
     GL11.glVertex2f(tileXcoord + TILE_XHALF, tileYcoord + TILE_YHALF); 
     setTextureCoordinates(3); 
     GL11.glVertex2f(tileXcoord + (TILE_XHALF * 2), tileYcoord); 
     setTextureCoordinates(4); 
     GL11.glVertex2f(tileXcoord + TILE_XHALF, tileYcoord - TILE_YHALF); 
    } 
    GL11.glEnd(); 

} 

//***** SET TEXTURE COORDINATES ***** 
    public void setTextureCoordinates(int pos) { 
     Rectangle rect = textureAtlas.getTexture(ID); 
     switch (pos) { 
     case 1 : 
      GL11.glTexCoord2f(0.0f, 0.0555f); // left-middle 
      //GL11.glTexCoord2f(0.0f, 0.5f); 
      break; 

     case 2: 
      GL11.glTexCoord2f(0.0555f, 0.111f); //top-middle 
      //GL11.glTexCoord2f(0.5f, 1f); 
      break; 

     case 3: 
      GL11.glTexCoord2f(0.111f, 0.0555f); // right-middle 
      //GL11.glTexCoord2f(1f, 0.5f); 
      break; 

     case 4: 
      GL11.glTexCoord2f(0.0555f, 0.0f); // bottom-middle 
      //GL11.glTexCoord2f(0.5f, 0.0f); 
      break; 
     } 

} 

編輯:輸出:http://i.imgur.com/YYKo37m.png

回答

1

它看起來像你得到關於貼片和質地上半遊戲中每個渲染的圖塊。

在預感上,我猜測無論你用什麼加載紋理,都會將圖像填充到下一個冪次(2048 x 1024)。然後

你的座標是(像素座標):

(0,  56.8) 
(113.7, 113.7) 
(227.3, 56.8) 
(113.7, 0 ) 

這大致都是符合您的紋理接縫。我對提供OpenGL綁定的Java庫並不熟悉,但是在您明確使用OpenGL 1.1的時候看到,圖書館會這樣做是有道理的。當時的硬件(1997年)無法處理不是兩次冪的紋理。 This was added as an extension in 2003

您可以:

  1. 墊出來的紋理兩個自己的未來電力和使用,適當的座標(0.0625,而不是0.111)
  2. 看的文檔質感裝載的庫您我們正在使用,看看是否有辦法強制非二次冪的紋理。如果沒有,我會很驚訝。

一般來說,將紋理填充到2的冪是很好的,因爲用來表示瓦片的花車將始終被精確表示。

+0

這樣做!我的天啊。你是一個拯救生命的人。謝謝! – Namone

+0

@Namone沒有問題:)如果您發現答案完全回答您的問題,請記住將答案標記爲已接受。 –