Webgl three.js几个对象的依赖关系

时间:2017-01-13 13:54:20

标签: javascript three.js parent-child

我对对象的依赖性有问题。我想让一个对象依赖于另外两个对象。如果我改变一个父对象的位置(例如y-Position),依赖对象(子对象)应该旋转,也应该移动。

这是我在图片上实现它的链接。在左侧是初始状态,在右侧是改变的条件。气缸应该取决于两个方框。这意味着圆柱体是子对象,并且框应该是该子对象的父对象。 我尝试使用父和子属性,但我无法使子对象依赖于两个父对象。

有人可以帮助我吗?

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);

3 个答案:

答案 0 :(得分:0)

您需要两个级别的层次结构,例如:

cube1.add(cylinder)
cylinder.add(cube2)

答案 1 :(得分:0)

您可以使用Object3D class上的lookAt功能执行您之后的操作。

例如

将您的圆柱体添加为cube1的子元素,因此移动cube1也会移动圆柱体。

cube1.add(cylinder)

然后当cube1(或/和cube2)移动时,调用柱面上的lookAt函数来查看cube2的位置。

cylinder.lookAt(cube2.position)

答案 2 :(得分:0)

是的,2pha实际上是正确的。我认为他实际需要的是这样的事情(注意你需要缩放圆柱体或移动方块,除非它们正好相隔圆柱高度):

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