你如何制作单个图像天空盒?

时间:2015-03-31 05:05:44

标签: opengl skybox

我已经让天空盒工作了,除了它需要六个文件。我想知道如何使用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;
}

1 个答案:

答案 0 :(得分: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}

等其他面孔。