Eu uso o mecanismo de física de balas através do Panda3d.
Minha cena ainda é muito simples, pense em 'Wolfenstein3d': com base em azulejos, as paredes são cubos sólidos.
Espero que as paredes bloqueiem o jogador e que ele deslize pelas paredes em caso de incidência não normal.
O que recebo é o que espero, com uma diferença: há algum nervosismo. Se eu tentar me forçar contra a parede, vejo os quadros piscando rapidamente entre duas posições. Eles diferem em cerca de 0,04 unidades de distância, o que corresponde a 4 cm no meu jogo.
Notei 4 cm em outro lugar: o fundo da cápsula do meu jogador fica 4 cm abaixo do solo, quando em repouso.
Isso significa que existe em algum lugar no mecanismo Bullet uma tolerância padrão de 0,04 unidades de comprimento para diferenciar o contato da colisão? Se sim, o que devo fazer? Devo mudar a escala do meu jogo para que essas unidades de 0,04 correspondam a 0,4 cm, tornando o tremor dez vezes menor? Ou posso pedir para o marcador alterar sua tolerância para um valor menor?
Editar
Este é o jitter que recebo: 6.155 - 6.118 = 0.036
LPoint3f(0, 6.11694, 0.835)
LPoint3f(0, 6.15499, 0.835)
LPoint3f(0, 6.11802, 0.835)
LPoint3f(0, 6.15545, 0.835)
LPoint3f(0, 6.11817, 0.835)
LPoint3f(0, 6.15726, 0.835)
LPoint3f(0, 6.11876, 0.835)
LPoint3f(0, 6.15911, 0.835)
LPoint3f(0, 6.11937, 0.835)
Eu encontrei um método setMargin. Ajustei para 5 mm no BoxShape para as paredes e na forma de cápsula para o player. Ele ainda oscila cerca de 35 mm, conforme ilustrado por este log (11.117 - 11.082 = 0,035):
LPoint3f(0, 11.0821, 0.905)
LPoint3f(0, 11.1169, 0.905)
LPoint3f(0, 11.082, 0.905)
LPoint3f(0, 11.117, 0.905)
LPoint3f(0, 11.082, 0.905)
LPoint3f(0, 11.117, 0.905)
LPoint3f(0, 11.0821, 0.905)
LPoint3f(0, 11.1175, 0.905)
LPoint3f(0, 11.0822, 0.905)
LPoint3f(0, 11.1178, 0.905)
LPoint3f(0, 11.0823, 0.905)
LPoint3f(0, 11.1183, 0.905)
A margem da cápsula mudou minha penetração no chão, porém, sou um pouco maior (0,905 em vez de 0,835). No entanto, não mudou nada ao colidir com as paredes.
Como posso tornar as colisões contra as paredes menos agitadas?
Editar no dia seguinte:
Após mais investigação, parece que objetos dinâmicos se comportam bem. Meu problema vem do btKinematicCharacterController que eu uso para mover meu personagem; esse material está totalmente corrompido, de acordo com toda a Internet: /.