Я думаю, что эта картина лучше всего объясняет мою проблему:
Сначала я перевешу коробку вдоль красной линии. Затем я хочу, чтобы эффект вращения был синей линией в a
, но то, что на самом деле происходит, больше похоже на синюю линию в b
. Похоже, что изменение вращения всегда относится к исходному пространству объектов, но перевод (несмотря на то, что он происходит первым) всегда относится к родительскому объекту и на самом деле не влияет на точки геометрии по отношению к пространству объектов. Прошу прощения, если это смущает; ясно, что я новичок в этом.
Важная часть кода, который производит этот эффект, ниже. Пожалуйста, имейте в виду, что ориентация изображения отличается от того, что производит этот код; изображение является просто примером, чтобы четко показать эффект.
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 );
Единственное решение, о котором я могу думать, это обернуть каждую коробку в другое пространство объекта и повернуть вокруг нее, но это кажется чрезмерной работой. Каков предпочтительный метод для достижения результата, который я ищу?