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?
Confira este artigo - que foi publicado aqui muitas vezes antes, basta pesquisar as perguntas e respostas com a detecção de colisão - mostra como fazer a resolução de colisão "contínua" de que Stephelton estava falando:
http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php?page=3
Basicamente, você resolve algumas equações cinemáticas básicas para o ponto no tempo exato quando suas duas caixas delimitadoras começam a se cruzar. Você resolve suas colisões no momento exato e depois prossegue com o tempo restante no seu quadro. Você pode ter que simular novamente o que acontece após o momento da colisão, pois as velocidades / acelerações dos seus objetos terão mudado. Mas aí está o seu ponto de partida ... de qualquer forma!
fonte