Glitch quando se deslocam câmera em OpenGL

votos
4

Estou escrevendo um motor de jogo baseado em azulejo para o iPhone e funciona em geral, além do seguinte falha. Basicamente, a câmera sempre manter o jogador no centro da tela, e move-se a seguir o jogador corretamente e atrai tudo corretamente quando parado. No entanto, embora o jogador está se movendo, as telhas da superfície o jogador está andando na falha, como mostrado:

http://img41.imageshack.us/img41/9422/movingy.png

Em comparação com o papel de carta (correcto):

http://img689.imageshack.us/img689/7026/still.png

Alguém tem alguma idéia de por que isso poderia ser?


Obrigado pelas respostas até agora. Flutuante erro ponto foi o meu primeiro pensamento também e eu tentei ligeiramente aumentar o tamanho das telhas, mas isso não ajuda. Alterar glClearColor para vermelho ainda deixa lacunas negras talvez por isso, não é erro de ponto flutuante. Desde os azulejos em geral vai usar diferentes texturas, eu não sei se matrizes vértice pode ser usado (eu sempre pensei que a mesma textura teve de ser aplicado a tudo na matriz, me corrija se eu estiver errado), e eu não acho que VBO está disponível em OpenGL ES. Configurando a filtragem de vizinho mais próximo melhorou as coisas, mas a falha ainda acontece a cada dez quadros mais ou menos, eo resultado pixelly significa que esta solução não é viável qualquer maneira.

A principal diferença entre o que estou fazendo agora eo que eu fiz no passado é que desta vez eu estou movendo a câmera ao invés dos objetos estacionários do mundo (ou seja, as telhas, o jogador ainda está a ser movida). O código que estou usando para mover a câmera é:

void Camera::CentreAtPoint( GLfloat x, GLfloat y )
{
 glMatrixMode(GL_PROJECTION); 
 glLoadIdentity();
 glOrthof(x - size.x / 2.0f, x + size.x / 2.0f, y + size.y / 2.0f, y - size.y / 2.0f, 0.01f, 5.0f);
 glMatrixMode(GL_MODELVIEW);
}  

lá existe um problema em fazer as coisas desta maneira e se assim é uma solução?

Publicado 16/12/2009 em 08:01
fonte usuário
Em outras línguas...                            


3 respostas

votos
2

Minha primeira suposição seria flutuante erro de arredondamento ponto . Isso poderia fazer com que as coordenadas para seu quads para ser apenas um pouco fora, resultando nas lacunas que você vê. Para verificar isso, você pode querer tentar mudar glClearColor () e ver se as lacunas mudam de cor com ela.

Uma solução para isso seria fazer as telhas ligeiramente maior. Apenas uma pequena incremento é necessário (como 0.0001f) para cobrir mais esse tipo de erro.

Alternativamente, você pode tentar usar uma matriz de vértice ou um VBO para armazenar sua malha de terra (garantindo que os quadrados adjacentes compartilham vértices). Eu esperaria isso para corrigir o problema, mas eu não estou 100% certo - e também deve tornar mais rápido.

Respondeu 16/12/2009 em 08:12
fonte usuário

votos
0

Sua devido à filtragem .. uso braçadeira de ponta e deixar uma borda de 1 ou 2 pixels .. é por isso que temos uma opção para BORDER na chamada glTexImage ..


a 4ª alteração de parâmetros 0-1

Respondeu 30/12/2009 em 15:22
fonte usuário

votos
0

Às vezes isso é causado pela filtragem questões em texels de fronteira. Você pode tentar usar GL_CLAMP_TO_EDGE em seus parâmetros de textura.

Respondeu 16/12/2009 em 08:21
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more