2017-01-13 6 views
0

У меня проблема с зависимостью объектов. Я хочу, чтобы один объект зависел от двух других объектов. Если я изменяю позицию одного родительского объекта (например, y-Position), зависимый объект (дочерний объект) должен вращаться и должен также перемещаться.Webgl three.js Зависимость нескольких объектов

Вот ссылка, где я понял это на картинке. С левой стороны находится начальное состояние, справа - измененное состояние. Цилиндр должен зависеть от двух коробок. Это означает, что цилиндр является дочерним объектом, а ящики должны быть как родительскими объектами этого дочернего объекта. Я пробовал его с использованием родительских и дочерних свойств, но я не мог сделать дочерний объект зависимым от двух родительских объектов.

Может кто-нибудь мне помочь?

enter image description here

Это мой текущий код, но LookAt функция не работает правильно.

//cube 1 
    var cube=new THREE.BoxGeometry(4,4,4); 
    var material=new THREE.MeshBasicMaterial ({ color: 0xffffff }); 
    mesh1=new THREE.Mesh(cube,material); 
    mesh1.position.set(-2,2,0); 
    scene.add(mesh1); 

    //cube 2 
    var cube2=new THREE.BoxGeometry(2,2,2); 
    var material=new THREE.MeshBasicMaterial ({ color:0x000000 }); 
    mesh2=new THREE.Mesh(cube2,material); 
    mesh2.position.x=6; 
    mesh2.position.y=2; 
    //mesh2.position.y=-2; 
    scene.add(mesh2); 

    //cylinder 
    var cylinder=new THREE.CylinderGeometry(1,1,6,30); 
    var material=new THREE.MeshBasicMaterial({ color:0xff3399 }); 
    mesh3=new THREE.Mesh(cylinder,material); 
    mesh1.add(mesh3); 
    mesh3.lookAt(mesh2.position); 

ответ

0

Вам необходимо два уровня иерархии, например:

cube1.add(cylinder) 
cylinder.add(cube2) 
+0

Я не думаю, что это даст желаемый результат как в вашем примере, перемещение куба 1 будет перемещать цилиндр и куб2 на ту же сумму – 2pha

0

Вы можете быть в состоянии делать то, что вы после того, как с lookAt функции на Object3D class.

например.

Добавьте цилиндр в качестве ребенка куба1, так что перемещающийся куб1 также перемещает цилиндр.

cube1.add(cylinder) 

тогда, когда cube1 (или/и cube2) перемещается вызов функции LookAt на цилиндре, чтобы посмотреть на положение cube2 в.

cylinder.lookAt(cube2.position) 
+0

Благодарим вас за быстрый ответ. Я попробую это завтра. Я уже использовал метод с дочерним элементом, но я забыл метод lookAt, потому что пока не знаю этого метода. – webgl

+0

Я отредактировал мое сообщение с моим текущим кодом. У меня проблемы с функцией lookat. Я думаю, что функция lookat работает с вектором направления? – webgl

0

Да, 2pha Правильно на самом деле. Я думаю, что он на самом деле нужно что-то вроде этого (обратите внимание, вам необходимо масштабировать цилиндр или перемещать квадраты, если они не являются именно высота цилиндра врозь):

cylinder.position.x=cube1.position.x 
cylinder.position.y=cube1.position.y 
cylinder.position.z=cube1.position.z 
cylinder.lookAt(cube2.position) 
+0

Зачем добавить еще один ответ? Почему бы не изменить старый? Этот ответ не добавляет ничего лишнего в то, что я вложил в мой ответ. – 2pha

+0

Метод lookAt не работает, как я себе представлял. – webgl

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