2013-07-31 38 views
6

Tôi đã sửa đổi cube quay đơn này để nó chứa 3 khối trong một Object3DThree.js: Xoay tại trung tâm của một đối tượng

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

Trong ví dụ trên nó sử dụng các khối đầu tiên. Tôi cần nó để xoay trên một trục duy nhất tại trung tâm chính xác của đối tượng.

Các object3D đang

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

Đây là xoay

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

EDIT: Chỉ cần nói rằng đây là một ví dụ để chứng minh vấn đề, đối tượng đang thực tế của tôi chứa nhiều hình dạng kích thước khác nhau.

Trả lời

13

Bạn có thể xác định tọa độ của trung tâm.

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

Hơn một năm sau, chỉ cần googled với cùng một vấn đề và tìm thấy câu hỏi của riêng tôi là kết quả hàng đầu! +1 câu trả lời này! –

0

Cách thực sự dễ dàng là chỉ cần xác định vị trí hình khối của bạn hơi khác nhau, vì vậy thay vì thiết

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

và rời khỏi mesh3 để mặc định một x 0, bạn có thể đặt chúng như thế này:

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

Điều này sẽ làm cho hộp trung tâm cũng nằm ở giữa cảnh.

jsFiddle cho biết nó hoạt động.

+0

Tôi đã hy vọng có một giải pháp đệ quy, khối quay trong jsfiddle chỉ là một ví dụ ... các đối tượng trong mã của tôi chứa vô số khối, máy bay vv - Tôi đã suy nghĩ câu trả lời có thể nằm trong việc trung tâm xyz của đối tượng và sau đó bằng cách nào đó áp dụng nó vào vòng quay ... –

+0

Tôi sẽ xem xét câu trả lời được chấp nhận trong [câu hỏi này] (http://stackoverflow.com/questions/11060734/how-to-rotate -a-3d-đối tượng-trên-trục-ba-js) sau đó. Nó có thể là chính xác những gì bạn cần. –

Các vấn đề liên quan