Я реалізував простий двигун фізики 3D-ігор. У мене вже є пристойне виявлення зіткнення, тепер я намагаюся розібратися у частині відповіді на зіткнення. Я використовую імпульсний метод для обчислення швидкостей після зіткнення. Це працює досить добре, однак це не заважає органам продовжувати взаємопроникати. Тож у мене є додатковий фрагмент коду, щоб вирішити проникнення. В даний час я просто переміщую тіла вздовж нормального контакту на половину глибини проникнення - перше тіло в напрямку нормального контакту, друге тіло в зворотному напрямку.
Більшість випадків це нормально, але є деякі небажані ефекти. Наприклад, уявіть вузький коридор і предмет, що рухається по ньому. Якщо об’єкт потрапив в одну зі стін коридору, роздільна здатність проникнення переміщує його в протилежну стіну, а потім у наступному кадрі назад у першу стіну тощо. Ефект полягає в тому, що об’єкт є своєрідним вібруванням дуже швидко між стінами, що не дуже сильно.
Тож моє запитання: чи є кращий спосіб вирішити проникнення? Можливо, не переміщуйте тіла, просто якось регулюйте їх швидкість (крім обчислення імпульсу), щоб вони перестали рухатися назустріч одне одному, і проникнення вирішиться в наступній пару кадрів. Я просто здогадуюсь тут. Будь-які ідеї?