Ho implementato un semplice motore di fisica dei giochi 3D. Ho già un buon rilevamento delle collisioni, ora sto cercando di capire la parte di risposta alle collisioni. Sto usando il metodo basato sugli impulsi per calcolare le velocità post-collisione. Funziona abbastanza bene, tuttavia, non impedisce completamente ai corpi di continuare a compenetrarsi. Quindi ho un pezzo di codice aggiuntivo per risolvere la penetrazione. Attualmente, muovo i corpi lungo il contatto normale per metà della profondità di penetrazione - primo corpo nella direzione del contatto normale, secondo corpo nella direzione opposta.
Questo va bene per la maggior parte del tempo, ma ci sono alcuni effetti indesiderati. Ad esempio, immagina uno stretto corridoio e un oggetto che si muove attraverso di esso. Se l'oggetto colpisce una delle pareti del corridoio, la risoluzione di penetrazione lo sposta nella parete opposta, quindi nel fotogramma successivo nella prima parete e così via. L'effetto è che l'oggetto è una specie di vibrazione molto veloce tra le pareti, il che non è carino.
Quindi la mia domanda è se esiste un modo migliore per risolvere la penetrazione? Forse non muovere i corpi, solo in qualche modo regolare le loro velocità (oltre al calcolo degli impulsi) in modo che smettano di muoversi l'uno verso l'altro e la penetrazione si risolva da sola nei prossimi due fotogrammi. Sto solo indovinando qui. Qualche idea?