Dans un jeu de type minecraft que je fais, j'obtiens des bords blancs sur mes cubes:
Il est beaucoup plus visible dans les textures plus sombres. Les textures sont configurées comme ceci:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
De l'aide?
Réponses:
Il existe deux causes possibles pour ce type de problème, selon exactement de quel problème il s'agit. Je vais énumérer les deux:
1. Vous voyez d'autres couleurs de votre texture le long des bords des carreaux.
Cela me semble être le problème dans ce cas, car tous les pixels de bord sont l'une des trois couleurs qui sont plausiblement dans votre texture: blanc, noir et marron.
Si vous utilisez plusieurs images de tuiles côte à côte dans une seule texture (un atlas de texture), comme je suppose que vous le faites, cela est inévitable. Cela se produit parce que le GPU ne correspond pas parfaitement à l'interpolation le long du bord d'un triangle avec l'interpolation le long de la texture, et vous obtenez de petits morceaux de la texture adjacente.
Il y a plusieurs choses que vous pouvez faire.
CLAMP[_TO_EDGE]
, mais d'une manière qui est consciente des atlas de texture - votre utilisation de ceux-ci n'a aucun effet parce que la plupart de vos bords de carreaux ne sont pas au bord de la texture.) C'est la solution que j'utilise dans ma propre entrée dans le genre, Cubes . Je ne connais aucun inconvénient particulier, sauf qu'il utilise plus de mémoire de texture.2. Vous voyez à travers les écarts entre les tuiles.
Je ne pense pas que ce soit le problème dans ce cas, car il n'y a pas de terrain vert vu à travers les lacunes, mais je l'inclus pour être complet.
Cela peut se produire lorsque vous ne fournissez pas exactement les mêmes coordonnées pour les sommets des bords de réunion des tuiles adjacentes, ce qui se produit généralement en raison d'une erreur en virgule flottante. Par exemple, si vous avez des tuiles de taille 0,6 et calculez le bord droit de la tuile à
x=100
avec(100*0.6) + 0.6
, et le bord gauche de la tuile àx=101
avec(100*0.6)
, vous n'obtiendrez pas la même réponse exacte, et la différence peut être visible sous forme de petites taches de lacunes.La solution est de s'assurer que votre arithmétique est cohérente; voici quelques façons de procéder:
index*size + size
, mais seulement(index+1)*size
.la source