Saya memiliki array (peta tinggi) dan ingin merendernya tetapi saya ingin tekstur berbeda untuk setiap "persegi", dapatkah saya melakukannya dengan satu VBO untuk simpul dan VBO kedua untuk tekstur?
Merupakan ide bagus untuk membagi array itu menjadi beberapa bagian yang lebih kecil. ukuran apa yang terbaik? Saya membaca di suatu tempat 32*32?, atau 16*16 seperti Minecraft?
Saya ingin saya dapat mengubah ketinggian dalam array, saat program dijalankan dan render berubah, apa yang harus saya lakukan?
Ini adalah bagian dari program saya:
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);