Я использую Cannon.js с Three.js.
Я создал сцену, состоящую из 1 поля высоты и 5 шаров. Я хочу, чтобы шары катались по полю высот, используя физику cannon.js.
При движении мыши я вращаю поле высоты по оси Y, чтобы сферы катились вперед и назад.
У меня есть цикл обновления, который копирует положение сферы и кватернион из cannon.js и применяется к визуальной сфере three.js. Поле высоты также обновляется одновременно с визуальным полом three.js. Оба они выполняются в цикле for в requestAnimationFrame.
updateMeshPositions() {
for (var i = 0; i !== this.meshes.length; i++) {
this.meshes[i].position.copy(this.bodies[i].position);
this.meshes[i].quaternion.copy(this.bodies[i].quaternion);
this.hfBody.position.copy(this.mesh.position);
this.hfBody.quaternion.copy(this.mesh.quaternion);
}
}
Однако проблема в том, что когда «пол» вращается вперед и назад, сферы застревают, а иногда даже проваливаются через пол. Вот пример кода - https://codepen.io/danlong/pen/qJwMBo
Перемещайте мышь вверх и вниз по экрану, чтобы увидеть это в действии.
Есть ли лучший или другой способ поворачивать «пол», сохраняя при этом движение сферы?
Непосредственная (т.е. «мгновенная») установка положения / поворота может нарушить обработку столкновений во всех физических движках, включая cannon.js. По сути, вы телепортируете предметы в космос, заставляя предметы застревать или проходить друг через друга.
Что тебе следует сделать, это
Как правило, непросто определить правильное количество силы, которое нужно применить для достижения желаемого визуального поведения.
Ах, я понимаю, это имеет смысл, если вы так выразились. Спасибо за совет, я воплощу эти идеи и посмотрю, как у меня дела.