Tôi nghĩ rằng bức tranh này tốt nhất giải thích vấn đề của tôi:Làm cách nào để xoay một số mặt trăng quanh hành tinh với THREE.js?
Trước tiên tôi dịch các hộp dọc theo đường đỏ. Tiếp theo, tôi muốn hiệu ứng xoay là đường màu xanh trong a
, nhưng những gì thực sự xảy ra giống với đường màu xanh trong b
. Nó cảm thấy như thay đổi xoay luôn luôn liên quan đến không gian đối tượng ban đầu, nhưng bản dịch (mặc dù xảy ra trước) luôn luôn liên quan đến cha mẹ, và không thực sự ảnh hưởng đến các điểm hình học liên quan đến không gian đối tượng. Tôi xin lỗi nếu điều đó khó hiểu; rõ ràng tôi mới ở đây.
Phần quan trọng của mã tạo hiệu ứng này ở bên dưới. Xin lưu ý rằng hướng của hình ảnh khác với mã này tạo ra; hình ảnh chỉ là một ví dụ để hiển thị hiệu ứng rõ ràng.
var objectContainer = new THREE.Object3D();
var tubeRadius = 100;
var tubeGeometry = new THREE.CylinderGeometry(tubeRadius, tubeRadius, tubeRadius * 3, 36, 1, false);
var tube = new THREE.Mesh(tubeGeomtry, material);
scene.add(tube);
var boxes = new THREE.Object3D();
var boxEdge = 50;
var boxGeometry = new THREE.CubeGeometry(boxEdge, boxEdge, boxEdge);
var box1 = new THREE.Mesh(boxGeometry, material);
box1.translateX(tubeRadius + boxEdge/2 + 5);
box1.translateY(boxEdge/2);
box1.rotation = new THREE.Vector3(0, 2*Math.PI/3*0, 0);
boxes.add(box1);
var box2 = box1.clone();
box2.rotation = new THREE.Vector3(0, 2*Math.PI/3*1, 0);
boxes.add(box2);
var box3 = box1.clone();
box3.rotation = new THREE.Vector3(0, 2*Math.PI/3*2, 0);
boxes.add(box3);
scene.add(boxes);
Giải pháp duy nhất tôi có thể nghĩ là bọc mỗi hộp trong không gian đối tượng khác và xoay vòng, nhưng có vẻ như công việc quá mức. Phương pháp ưa thích để đạt được kết quả mà tôi đang tìm kiếm là gì?
Tôi không biết Three.js, nhưng cách dịch nó bằng 'Math.cos (xoay) * boxEdge/2, Math.sin (xoay) * boxEdge/2' cũng như xoay vòng cục bộ? – Ryan
Điều đó có nghĩa là làm việc gấp đôi, xoay và dịch từng hộp. Thực sự những gì tôi muốn làm là xoay mỗi bản sao về cùng một điểm, đó là nguồn gốc trước khi dịch. –