Dans mon jeu, il y a un terrain ressemblant à Minecraft fait de cubes. Je génère un vertex buffer à partir des données voxel et utilise un atlas de texture pour l’apparence de différents blocs:
Le problème est que la texture des cubes distants s’interpole avec les carreaux adjacents dans l’atlas de texture. Cela se traduit par des lignes de couleurs incorrectes entre les cubes (vous devrez peut-être afficher la capture d'écran ci-dessous à sa taille maximale pour voir les défauts graphiques):
Pour le moment, j'utilise ces paramètres d'interpolation, mais j'ai essayé toutes les combinaisons et même GL_NEAREST
sans mappage, les résultats ne sont pas meilleurs.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
J'ai également essayé d'ajouter un décalage dans les coordonnées de la texture pour sélectionner une zone légèrement plus petite de la mosaïque, mais comme l'effet indésirable dépend de la distance qui le sépare de la caméra, le problème ne peut pas être résolu complètement. De loin, les rayures apparaissent quand même.
Comment puis-je résoudre ce saignement de texture? Étant donné que l’utilisation d’un atlas de texture est une technique populaire, il peut exister une approche commune. Malheureusement, pour certaines raisons expliquées dans les commentaires, je ne peux pas utiliser différentes textures ou tableaux de textures.
GL_LINEAR
un résultat similaire ou sélectionnera le pixel le plus proche, GL_NEAREST
ce qui entraînera également des bandes entre les blocs. La dernière option mentionnée diminue mais n'élimine pas le défaut de pixel.