2017-01-13 44 views
0

我有一個對象依賴關係的問題。我想讓一個對象依賴於另外兩個對象。如果我改變一個父對象的位置(例如y位置),則依賴對象(子對象)應該旋轉並且也應該移動。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

您可以做你的Object3D classlookAt功能後,在做什麼。

例如。

將您的圓柱體添加爲cube1的子物體,以便移動cube1也將移動圓柱體。

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