Ответ: Лабиринт с шариком внутри ( проблемка)
Не чётко прочёл всю тему, наверное уже говорили..
Коллизия в блице весьма странно устроена, прдположим такую ситуацию: есть объект динамичный (тот же шарик), и есть статичный уровень. Если между двумя тактами, перемещение шарика будет с одной стороны сразу на другую сторону фуйса лабиринта, то в проверке коллизии, как я понимаю будет проверка на весь путь, так сказать будет столько шагов проверки, сколько длина всего "пути / (примерно радиус сферы для фруструма)", таким образом объект не сможет проскочить, т.к. в одном из проходов наткнётся на стенку. Теория может быть ошибочна, но на практике всё упирается именно в подобное.
Далее, если уровень станет динамичным, а кручение не есть перемещение, то в один из тактов позиция одного из предпологаемых трианглов, с которым должно было произойти столкновение, проскочит тот кусочек, что даст возможность в один шаг объекту уже стать на другой стороне фейса. Но тут возникает моммент, к примеру если есть проходы, то по идее изменение окружения тоже должно быть по проходам, и теперь представим что всё будет вот так по проходам проверятся - комп умрёт. Поэтому эта теория, учитывая данный факт, весьма шатка и не убедительна.
Короче говоря, в моммент между двумя проходами проверки на коллизию, фейс крутящегося объекта проскочил. Кстати в PhysX и любом другом физическом движке будет также. Но в PhysX есть CCD (Continuous Collision Detection), эта функция включает какраз вот эту проходную проверку, при этом регулировать шаг тоже можно, но тут возникает моммент какраз который Очень сильно затормозит просчёт. Для одного шарика - думаю будет не сильно и тормозно, но не переусердствуйте с параметром проходности (если всёже юзать PhysX и эту функцию).
Варианты решения проблеммы:
- Увеличение размера коллизии шарика (не обязательно, но соответственно и визуальный шарик придётся увеличить)
- Ограничение скорости перемещения шарика. Скорость не должна превышать радиуса шарика, между двумя просчётами коллизии, с учётом встречной скорости перемещения трианглов лабиринта.
- Исползование CCD функционала в PhysX.
- Фиксировать по времени частость вызова функции просчёта физики.
Можно и совместить все 3 предложенных варрианта, а можно использовать один из них, но второй будет обязательным, но без третьего или жёсткого выполнения второго предложения, проскок всёравно реален. Четвёртый пункт обязателен без каких либо вопросов.
|