如何在 Three.js 中围绕组的中心旋转
How can I rotate around the center of a group in Three.js
我创建了一组立方体,我正在尝试弄清楚如何设置中心以便旋转它们。
这里是fiddle:https://jsfiddle.net/of1vfhzz/
这里我添加立方体:
side1 = new THREE.Object3D();
addCube({ name: 'side1topleft', x: -8.5, y: 7.5, z: 5 });
addCube({ name: 'side1topmiddle', x: -4, y: 7.5, z: 5 });
addCube({ name: 'side1topright', x: .5, y: 7.5, z: 5 });
addCube({ name: 'side1middleleft', x: -8.5, y: 3, z: 5 });
addCube({ name: 'side1middlemiddle', x: -4, y: 3, z: 5 });
addCube({ name: 'side1middleright', x: .5, y: 3, z: 5 });
addCube({ name: 'side1bottomleft', x: -8.5, y: -1.5, z: 5 });
addCube({ name: 'side1bottommiddle', x: -4, y: -1.5, z: 5 });
addCube({ name: 'side1bottomright', x: .5, y: -1.5, z: 5 });
scene.add(side1);
function addCube(data) {
var cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
cube.position.x = data.x
cube.position.y = data.y
cube.position.z = data.z
cube.rotation.set(0, 0, 0);
cube.name = data.name;
side1.add(cube);
}
然后在render scene我绕着y轴旋转它,但是我需要设置中心。我试过 translate
,但我没听懂。
您希望您的网格组围绕组中心旋转。
一种选择是平移您的网格几何体,因此它们作为一个集合以本地原点为中心。
如果您不想这样做,那么您可以创建一个祖父对象 pivot
,然后旋转它。
在您的例子中,side1
是您子网格的父级。所以使用这个模式:
var pivot = new THREE.Group();
scene.add( pivot );
pivot.add( side1 );
side1.position.set( 4, - 3, - 5 ); // the negative of the group's center
在你的动画循环中,旋转枢轴;
pivot.rotation.z += 0.02;
fiddle: https://jsfiddle.net/of1vfhzz/1/
three.js r.77
我创建了一组立方体,我正在尝试弄清楚如何设置中心以便旋转它们。
这里是fiddle:https://jsfiddle.net/of1vfhzz/
这里我添加立方体:
side1 = new THREE.Object3D();
addCube({ name: 'side1topleft', x: -8.5, y: 7.5, z: 5 });
addCube({ name: 'side1topmiddle', x: -4, y: 7.5, z: 5 });
addCube({ name: 'side1topright', x: .5, y: 7.5, z: 5 });
addCube({ name: 'side1middleleft', x: -8.5, y: 3, z: 5 });
addCube({ name: 'side1middlemiddle', x: -4, y: 3, z: 5 });
addCube({ name: 'side1middleright', x: .5, y: 3, z: 5 });
addCube({ name: 'side1bottomleft', x: -8.5, y: -1.5, z: 5 });
addCube({ name: 'side1bottommiddle', x: -4, y: -1.5, z: 5 });
addCube({ name: 'side1bottomright', x: .5, y: -1.5, z: 5 });
scene.add(side1);
function addCube(data) {
var cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
cube.position.x = data.x
cube.position.y = data.y
cube.position.z = data.z
cube.rotation.set(0, 0, 0);
cube.name = data.name;
side1.add(cube);
}
然后在render scene我绕着y轴旋转它,但是我需要设置中心。我试过 translate
,但我没听懂。
您希望您的网格组围绕组中心旋转。
一种选择是平移您的网格几何体,因此它们作为一个集合以本地原点为中心。
如果您不想这样做,那么您可以创建一个祖父对象 pivot
,然后旋转它。
在您的例子中,side1
是您子网格的父级。所以使用这个模式:
var pivot = new THREE.Group();
scene.add( pivot );
pivot.add( side1 );
side1.position.set( 4, - 3, - 5 ); // the negative of the group's center
在你的动画循环中,旋转枢轴;
pivot.rotation.z += 0.02;
fiddle: https://jsfiddle.net/of1vfhzz/1/
three.js r.77