Множественная привязка текстур lwgl к одному VBO

У меня есть массив (карта высот), и я хочу его отобразить, но мне нужна разная текстура для каждого «квадрата». Могу ли я сделать это с одним VBO для вершин и вторым VBO для текстуры?

Хорошая идея разделить этот массив на более мелкие части. какой размер лучше? Где-то читал 32*32?, или 16*16 как в Майнкрафте?

Я хочу, чтобы я мог изменять высоту в массиве во время запуска программы и изменения рендеринга, что я должен сделать?

Вот часть моей программы:

amountOfVertices = 6 * (data.length - 1) * (data[0].length - 1);

vertexData = BufferUtils.createFloatBuffer(amountOfVertices * vertexSize);
for (int z = 0; z < data.length - 1; z++) {
    for (int x = 0; x < data[z].length-1; x++) {
        vertexData.put(new float[] { x, data[z+1][x], z+1, }); // Vertex
        vertexData.put(new float[] { x+1, data[z+1][x+1], z+1, }); // Vertex
        vertexData.put(new float[] { x+1, data[z][x+1], z, }); // Vertex

        vertexData.put(new float[] { x+1, data[z][x+1], z, }); // Vertex
        vertexData.put(new float[] { x, data[z][x], z, }); // Vertex
        vertexData.put(new float[] { x, data[z+1][x], z+1, }); // Vertex
    }
}
vertexData.flip();

textureData = BufferUtils.createFloatBuffer(amountOfVertices * texSize);
for (int z = 0; z < data.length - 1; z++) {
    for (int x = 0; x < data[z].length-1; x++) {
                textureData.put(new float[] { 1f, 1f, }); // Texture Coordinate
                textureData.put(new float[] { 1f, 0f, }); // Texture Coordinate
                textureData.put(new float[] { 0f, 0f, }); // Texture Coordinate

                textureData.put(new float[] { 0f, 0f, }); // Texture Coordinate
                textureData.put(new float[] { 0f, 1f, }); // Texture Coordinate
                textureData.put(new float[] { 1f, 1f, }); // Texture Coordinate
    }
}
textureData.flip();

glBindTexture(GL_TEXTURE_2D, texture.getTextureID());

stone.bind();//bind a texture

vboVertexHandle = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboVertexHandle);
glBufferData(GL_ARRAY_BUFFER, vertexData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);


vboTexCoordHandle = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboTexCoordHandle);
glBufferData(GL_ARRAY_BUFFER, textureData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

person Jakub    schedule 04.03.2014    source источник


Ответы (1)


Что ж, я думаю, что лучшим способом решить вашу проблему было бы использовать текстурную карту и при этом использовать полный VBO, не разделяя его на части. Наличие нескольких плиток на одном изображении также выполняется быстрее, поскольку привязка текстуры требует много ресурсов. В любом случае, попробуйте создать карту тайлов. Тогда координаты текстуры будут описывать вашу текстуру. Так, например, если у вас есть 4 разные текстуры одинакового размера, вы можете поместить их все в одно большое изображение 2x2. Нет, чтобы привязать первую текстуру к квадрату, вы можете использовать координаты текстуры (0, 0) до (0,5, 0,5). Последняя текстура будет привязана к координатам (0,5, 0,5) до (1,0, 1,0). Это лучший способ, который сейчас приходит мне на ум.

person uwap    schedule 18.04.2014