2013-07-31 23 views
6

Mam zmodyfikowanej ten jeden przędzenia kostkę tak, że zawierają 3 kostki w Object3DThree.js: Obrót w środku obiektu

http://jsfiddle.net/VsWb9/1243/

W powyższym przykładzie wykorzystuje pierwszą kostkę. Potrzebuję go, aby obracał się na jednej osi dokładnie w środku obiektu.

Kod object3D

geometry = new THREE.CubeGeometry(50, 50, 50); 
    material = new THREE.MeshNormalMaterial(); 
    mesh = new THREE.Object3D(); 
    mesh1 = new THREE.Mesh(geometry, material); 
    mesh1.position.x = 50; 
    mesh2 = new THREE.Mesh(geometry, material); 
    mesh2.position.x = 100; 
    mesh3 = new THREE.Mesh(geometry, material); 

    mesh.add(mesh1); 
    mesh.add(mesh2); 
    mesh.add(mesh3); 

    scene.add(mesh); 

Oto rotacji

mesh.rotation.x += 0.01; 
    mesh.rotation.y += 0.02; 

EDIT: po prostu powiedzieć, że jest to przykład wykazać problem, mój rzeczywisty przedmiot kod zawiera wiele różnych rozmiarach kształty.

Odpowiedz

13

Możesz zdefiniować współrzędne centrum.

mesh.position.set(center.x, center.y, center.z); 
mesh.geometry.applyMatrix(new THREE.Matrix4().makeTranslation(-center.x, -center.y, -center.z)); 
+5

Ponad rok później po prostu googled z tym samym problemem i znalazł moje własne pytanie jako najlepszy wynik! Daj +1 tę odpowiedź! –

0

Naprawdę łatwy sposób jest po prostu umieścić swoje kostki nieco inaczej, więc zamiast ustawiania

mesh1.position.x = 50; 
mesh2.position.x = 100; 

i pozostawiając mesh3 domyślne do x 0, można je ustawić tak:

mesh1.position.x = -50; 
mesh3.position.x = 50; 

Co spowoduje, że środkowe pudełko będzie również w centrum sceny.

jsFiddle pokazując, że działa.

+0

Miałam nadzieję, że to rozwiązanie rekurencyjne, kostka przędzenie w jsfiddle to tylko przykład ... obiekt w moim kodu zawiera mnóstwo kostek, samolotów itp - Myślałam odpowiedź może leżeć w coraz centrum xyz obiektu, a następnie jakoś zastosowanie go do obrotu ... –

+0

Chciałbym rzucić okiem na zaakceptowaną odpowiedź w [to pytanie] (http://stackoverflow.com/questions/11060734/how-to-rotate -a-3d-object-on-axis-three-js). Może to być dokładnie to, czego potrzebujesz. –