Eu tenho um mecanismo 2D baseado em ladrilhos, onde a matriz de projeção é uma visão ortográfica do mundo sem nenhuma escala aplicada. Assim: uma textura de pixel é desenhada na tela no mesmo tamanho.
Tudo funciona bem e fica bonito, mas se a câmera fizer um movimento sub-pixel, pequenas linhas aparecerão entre os blocos. Posso lhe dizer com antecedência o que não resolve o problema:
GL_NEAREST
interpolação de texturasGL_CLAMP_TO_EDGE
O que "corrige" o problema é ancorar a câmera no pixel mais próximo, em vez de fazer uma conversão de subpixels. Eu posso viver com isso, mas o movimento da câmera se torna instável. Alguma idéia de como resolver esse problema sem recorrer ao truque de arredondamento que eu faço atualmente?
GL_NEAREST
ou apenas com eleGL_LINEAR
.Respostas:
Para evitar o estremecimento da câmera, você deve manter a câmera de coordenadas de ponto flutuante, mas prenda a projeção do OpenGL no pixel mais próximo.
fonte
Você pode ver esta postagem do blog sobre o uso em
double
vez defloat
para matrizes OpenGL. Eu tive problemas semelhantes no PC usando o OpenGL, por isso não é específico para iPhone / OpenGL ES, embora a postagem do blog mencione o OpenGL ES no iPhone.fonte
Pode ser que, ao calcular as coordenadas dos cantos de cada bloco, você esteja perdendo alguma precisão. Portanto, por exemplo, você acha que o vértice inferior direito do bloco 0 está exatamente no mesmo local que o vértice inferior esquerdo do bloco 1, mas na verdade não é. Uma idéia para corrigi-lo seria calcular uma grade temporária de coordenadas no início e, em seguida, copiar a posição apropriada ao construir a geometria do bloco. Isso faz sentido?
fonte