2017-01-13 2 views
0

Ich habe ein Problem mit der Abhängigkeit von Objekten. Ich möchte ein Objekt von zwei anderen Objekten abhängig machen. Wenn ich die Position eines Elternobjekts ändere (zum Beispiel die Y-Position), sollte das abhängige Objekt (das Kindobjekt) rotieren und sich auch bewegen.Webgl three.js Abhängigkeit von mehreren Objekten

Hier ist ein Link, wo ich es auf einem Bild erkannt habe. Auf der linken Seite befindet sich der Ausgangszustand, auf der rechten Seite der geänderte Zustand. Der Zylinder sollte von den beiden Boxen abhängig sein. Das bedeutet, dass der Zylinder das untergeordnete Objekt ist und die Boxen beide übergeordneten Objekte dieses untergeordneten Objekts sein sollten. Ich versuchte es mit Eltern- und Kindeigenschaften, aber ich konnte das Kindobjekt nicht von zwei Elternobjekten abhängig machen.

Kann mir jemand helfen?

enter image description here

Dies ist mein aktueller Code, aber die LookAt Funktion funktioniert nicht richtig.

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

Antwort

0

Sie müssen zwei Hierarchieebenen, zB:

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

Ich glaube nicht, das wird das gewünschte Ergebnis Wie in Ihrem Beispiel bewegt sich der Würfel 1 und der Würfel 2 in der gleichen Menge – 2pha

0

Sie der Lage zu tun, was Sie mit der lookAt Funktion auf dem Object3D class sind nach.

z.

Fügen Sie Ihren Zylinder als untergeordnetes Element von cube1 hinzu, sodass das Verschieben von cube1 auch den Zylinder verschiebt.

cube1.add(cylinder) 

dann, wenn cube1 (oder/und cube2) bewegt werden, rufen Sie die LookAt Funktion auf dem Zylinder an den cube2 Position zu suchen.

cylinder.lookAt(cube2.position) 
+0

Vielen Dank für Ihre schnelle Antwort. Ich werde es morgen versuchen. Ich habe die Methode bereits mit dem Kind verwendet, aber ich habe die lookAt-Methode vergessen, weil ich diese Methode noch nicht kannte. – webgl

+0

Ich habe meinen Beitrag mit meinem aktuellen Code bearbeitet. Ich habe Probleme mit der Lookat-Funktion. Ich denke, die Lookat-Funktion arbeitet mit einem Richtungsvektor? – webgl

0

Ja, 2pha ist eigentlich richtig. Ich denke, was er wirklich braucht so etwas wie dieses (beachten Sie benötigen den Zylinder oder bewegen, um die Quadrate zu skalieren, wenn sie nicht genau Zylinderhöhe voneinander entfernt sind):

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

Warum eine weitere Antwort hinzufügen? Warum nicht deine alte bearbeiten? Diese Antwort fügt dem, was ich in meine Antwort geschrieben habe, nichts hinzu. – 2pha

+0

Die LookAt-Methode funktioniert nicht wie ich es mir vorgestellt habe. – webgl

Verwandte Themen