我想实现的是围绕枢轴点旋转几何图形,并将其作为几何图形的新定义。我不想保留对rotationZ的编辑,而是希望当前的rotationZ成为新的rotationZ 0。
这样,当我创建一个新的旋转任务时,它将从新给定的枢轴点和新给定的弧度开始。
我尝试过的方法会使旋转点移动:
// Add cube to do calculations
var box = new THREE.Box3().setFromObject( o );
var size = box.getSize();
var offsetZ = size.z / 2;
o.geometry.translate(0, -offsetZ, 0)
// Do ratation
o.rotateZ(CalcUtils.degreeToRad(degree));
o.geometry.translate(0, offsetZ, 0)
我也尝试添加一个组并旋转该组,然后删除该组。但我需要保持旋转而没有所有额外的对象。我创建的代码
var box = new THREE.Box3().setFromObject( o );
var size = box.size();
var geometry = new THREE.BoxGeometry( 20, 20, 20 );
var material = new THREE.MeshBasicMaterial( { color: 0xcc0000 } );
var cube = new THREE.Mesh( geometry, material );
cube.position.x = o.position.x;
cube.position.y = 0; // Height / 2
cube.position.z = -size.z / 2;
o.position.x = 0;
o.position.y = 0;
o.position.z = size.z / 2;
cube.add(o);
scene.add(cube);
// Do ratation
cube.rotateY(CalcUtils.degreeToRad(degree));
// Remove cube, and go back to single object
var position = o.getWorldPosition();
scene.add(o)
scene.remove(cube);
console.log(o);
o.position.x = position.x;
o.position.y = position.y;
o.position.z = position.z;
我的问题是如何将当前旋转保存为新的0旋转点。使旋转最终生效。
编辑 我添加了一张图片来说明我的意思。这个对象是绿色的。世界的0点是黑色的,对象的0点是红色的,旋转点是蓝色的。
如何让对象围绕蓝点旋转?