2016-09-05 3 views
0

Как показано на рисунке ниже, у меня есть THREE.Scene с простым кубом. К кубу прилагается CANNON.Body для физики (представлено в зеленом каркасе).THREE.js Как рассчитать положение поворота на трехмерном круге?

CANNON.Body смещен от куба несколькими единицами измерения. Для вращения это смещение будет радиус.

Когда я повернуть куб, я хочу CANNON.Body вращаться вокруг куба на основе угла и радиусом. С правой стороны изображения я повернул куб с углом из 45 градусов (у меня также есть радианы). Однако CANNON.Body не вращает вокруг куб, только вокруг собственного центра. Мне нужно, чтобы повернуть вокруг куб для всех осей х, у и г.

Есть ли встроенная функция в THREE.js или я должен использовать для этого свое собственное математическое уравнение? Если да, то что бы это было?

enter image description here

Спасибо!

P.S. Я видел решения для чистого THREE.js Сцена, где геометрия переведена для управления точкой поворота. Поскольку у меня нет геометрии в моем CANNON.Body, это будет невозможно.

+0

Одним из способов может быть добавление (в противном случае пустого) 'Object3D' к сцене, но оставить его положение в центре вращения. Добавьте 'CANNON.Body' не к сцене, а к этому' Object3D'. Переместите 'CANNON.Body' так, как вы делали это раньше, чтобы переместить его, и вместо этого поверните' Object3D'. – Leeft

+0

@Leeft Спасибо за предложение. Однако я хочу попробовать и не добавлять ненужные объекты в сцену. Я знаю, что это можно решить математически, я просто не знаю, как применить его к моей ситуации и какие уравнения использовать. Если у вас есть другие предложения, пожалуйста, дайте мне знать! – Nicky

+0

Другие возможные варианты, о которых я могу думать: переместите точку опоры, или [сделайте математику самостоятельно] (http://stackoverflow.com/a/839931/3755747) (там нет встроенной функции, но у THREE.Math есть некоторые 'radToDeg' и' degToRad' помощники). Нет ничего плохого в создании некоторых (в противном случае пустых) 'Object3D', чтобы группировать или смещать вещи в вашей сцене, хотя на самом деле сама сцена по существу является« Object3D », в которой есть несколько« Object3D »в качестве своих детей (например, ваши огни, объекты и т. д.). – Leeft

ответ

0

Я никогда не работал с cannonjs, но можно было просто добавить куб и жесткое тело в группу Three.Group?

Как

var rigidBody = new CANNON.Body(); // whatever it is for cannon 
var model = new THREE.Group(); 

// your model goes here 
model.add(new THREE.Mesh(
    new THREE.BoxGeometry(1,1,1), 
    new THREE.MeshStandardMaterial() 
)); 

model.add(rigidBody); 
scene.add(model); 

Таким образом, если вы поворачиваете родительский элемент модель, то Rigidbody следует обновить таким же образом.

Смежные вопросы