Bonjour, je suis en train de coder un jeu avec des cubes(un peu comme minecraft) et j'aimerais rajouter des textures à mes blocs. Mais j'ai un problème, j'utilise des VBOs, il y a un vbo par Chunk contenant l'entièreté des données nécessaires pour chaque cube du Chunk(position, normales, texture coordinates) mais chaque blocs a une texture différentes. Alors comment faire pour dire à LWJGL de changer de texture pour chaque cube ?
Je ne sais pas si j'ai été clair, demandez moi si vous avez besoin de plus de précisions.
Merci d'avance pour votre aide.
EDIT:
C bon j'ai réussi à faire ce que je voulais, voici le code pour ceux qui sont dans le même problème que moi:
public Main(){
blockAtlas = new TextureAtlas(Arrays.asList("grass.png","stone.png","water.png"), "res/textures/blocks/", "atlasBlock", 1024);
Block.loadTexture();
}
public class TextureAtlas {
public HashMap<String, Vector2f> textures = new HashMap<>();
public String fileName;
public float textureSize;
public TextureAtlas(List<String> textures, String path, String fileName, int textureSize){
try{
this.fileName = fileName;
int size = (int) Math.sqrt(textures.size()) +1;
this.textureSize = 1f/(float)size;
List<BufferedImage> images = new ArrayList<BufferedImage>();
for(String texture : textures){
BufferedImage buffer = ImageIO.read(new File(path+""+texture));
images.add(buffer);
this.textures.put(texture, new Vector2f((float)(textures.indexOf(texture) % size)/(float)size,(float)(textures.indexOf(texture)/size)/(float)size));
}
BufferedImage atlas = new BufferedImage(size*textureSize,size*textureSize, BufferedImage.TYPE_INT_ARGB);
Graphics g = atlas.getGraphics();
for(BufferedImage img : images){
g.drawImage(img, (int)((float)(images.indexOf(img)%size) * (float)textureSize), (int)(images.indexOf(img)/size * (float)textureSize), null);
}
ImageIO.write(atlas, "PNG", new File(path+""+fileName+".png"));
}catch(Exception e){
e.printStackTrace();
}
}
}
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.