2015-03-31 8 views
-1

Я уже получил skybox для работы, за исключением того, что он принимает шесть файлов. Я хотел бы узнать, как использовать 1 файл вместо шести. Я смотрел по всему Интернету и не могу найти ничего, что сработает. Вот функция loadCubeMap, которая помещает изображения в cubemap:Как сделать одно изображение skybox?

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

+0

@keltar из кода я вижу, что его текущий файл cubemap находится в 6 png-изображениях. Я считаю, что он хочет этого в одном файле –

+0

@ratchetfreak Я вижу это, но это может означать разные вещи. Zipping 6 pngs - 1 файл; использование формата файлов с несколькими файлами - один файл; объединение всех изображений в один 2D - тоже один файл. Если используется последний параметр, изображение может содержать разные макеты (установите все 6 в одну строку или что-то еще), и загрузчик должен это знать. – keltar

ответ

0

Вы можете комбинировать 6 сторон скайбокса в одну текстуру так, как вы хотите. Все, что вам нужно сделать, - установить координаты текстуры каждой стороны skybox в соответствующую часть изображения. Если вы сделаете образ Skybox 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

и так далее для других лиц.

Смежные вопросы