Em um jogo parecido com minecraft que estou criando, obtenho bordas brancas em meus cubos:
É muito mais visível em texturas mais escuras. As texturas estão sendo configuradas assim:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Qualquer ajuda?
Respostas:
Existem duas causas possíveis para esse tipo de problema, dependendo exatamente de qual é o problema. Vou listar os dois:
1. Você está vendo outras cores da sua textura ao longo das bordas dos ladrilhos.
Isso me parece o problema neste caso, porque todos os pixels das bordas são uma das três cores que são plausíveis na sua textura: branco, preto e marrom.
Se você estiver usando várias imagens lado a lado em uma única textura (um atlas de textura), como suponho que esteja fazendo, isso é inevitável. Isso ocorre porque a GPU não combina perfeitamente a interpolação ao longo da borda de um triângulo com a interpolação ao longo da textura, e você obtém pequenos pedaços da textura adjacente.
Há várias coisas que você pode fazer.
CLAMP[_TO_EDGE]
, mas de uma maneira que esteja ciente dos atlas de textura - seu uso não tem efeito, porque a maioria das bordas de seu ladrilho não está na borda da textura.) Essa é a solução que eu uso em minha própria entrada no gênero, Cubos . Não conheço nenhuma desvantagem em particular, exceto que ela usa mais memória de textura.2. Você está vendo lacunas entre os ladrilhos.
Eu não acho que esse seja o problema neste caso, já que não há um terreno verde visível através das lacunas, mas estou incluindo-o por completo.
Isso pode ocorrer quando você não está fornecendo exatamente as mesmas coordenadas para os vértices das arestas da reunião de blocos adjacentes, o que geralmente ocorre devido a um erro de ponto flutuante. Por exemplo, se você tem telhas de tamanho 0,6 e calcular a margem direita da telha no
x=100
com(100*0.6) + 0.6
, ea borda esquerda da telha nox=101
com(100*0.6)
, você não vai ter exatamente a mesma resposta, e a diferença pode ser visível como pequenas manchas de lacunas.A solução é garantir que sua aritmética seja consistente; algumas maneiras de fazer isso são:
index*size + size
, mas apenas(index+1)*size
.fonte