Eu implementei um mecanismo simples de física de jogos em 3D. Já tenho uma detecção de colisão decente, agora estou tentando descobrir a parte da resposta à colisão. Estou usando o método baseado em impulso para calcular as velocidades pós-colisão. Isso funciona muito bem, no entanto, não impede completamente a interpenetração dos corpos. Portanto, tenho um código adicional para resolver a penetração. Atualmente, apenas movo os corpos ao longo do contato normal pela metade da profundidade de penetração - primeiro corpo na direção do contato normal, segundo corpo na direção oposta.
Isso é bom na maioria das vezes, mas existem alguns efeitos indesejáveis. Por exemplo, imagine um corredor estreito e um objeto passando por ele. Se o objeto atingir uma das paredes do corredor, a resolução de penetração o moverá para a parede oposta, no próximo quadro novamente para a primeira parede e assim por diante. O efeito é que o objeto vibra muito rápido entre as paredes, o que não é bonito.
Então, minha pergunta é se existe uma maneira melhor de resolver a penetração? Talvez não mova os corpos, apenas ajuste de alguma forma suas velocidades (além da computação por impulso) para que parem de se mover e a penetração se resolva nos próximos dois quadros. Estou apenas adivinhando aqui. Alguma ideia?