2015-03-31 64 views
-1

我已經得到了天空盒的工作,除了它需要六個文件。我想知道如何使用1個文件而不是6個文件。我看遍了互聯網,找不到任何可行的東西。下面是將這些圖像到立方體貼圖的loadCubeMap功能:你如何製作單幅影像天空盒?

public int loadCubeMap(String[] textureFiles){ 
    int texID = GL11.glGenTextures(); 
    GL13.glActiveTexture(GL13.GL_TEXTURE0); 
    GL11.glBindTexture(GL13.GL_TEXTURE_CUBE_MAP, texID); 

    for(int i=0;i<textureFiles.length;i++){ 
     TextureData data = decodeTextureFile("res/" + textureFiles[i] + ".png"); 
     GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL11.GL_RGBA, data.getWidth(), data.getHeight(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, data.getBuffer()); 
    } 
    GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); 
    GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); 
    textures.add(texID); 
    return texID; 
} 
+0

什麼形象?你知道佈局嗎?有關如何從'TextureData'中提取圖像部分的問題?請更具體一些。 – keltar 2015-03-31 07:01:08

+0

@keltar從代碼我看到他的當前立方體地圖是在6個PNG圖像。我相信他希望在一個單一的文件 – 2015-03-31 07:02:37

+0

@ratchetfreak我可以看到,但它可能意味着不同的事情。壓縮6 pngs是1個文件;使用多表面文件格式是一個文件;將所有圖像合併爲單個2D也是一個文件。如果使用最後一個選項,圖像可能包含不同的佈局(在一行中設置全部6個或其他任何內容),並且加載器必須注意這一點。 – keltar 2015-03-31 07:41:28

回答

0

您可以在天空盒的6面結合成一個單一的紋理你想要的任何方式。您只需將天空盒兩側的紋理座標設置爲圖像的相應部分。如果您將天空盒圖像TopBottomLeftRightFrontBack全部連續(6:1寬高比),那麼您所需要做的就是將頂面設置爲

{0.0,0.0} {0.1666,0.0} {0.1666,1.0} { 0.0,1.0}

和你的底面爲

{0.1666,0.0} {0.3332,0.0} {0.3332,1.0} {} 0.1666,1.0

等的其他面孔。