【发布时间】:2017-08-06 08:59:59
【问题描述】:
我想要实现的是几何围绕枢轴点的旋转,并使其成为几何的新定义。我不想继续编辑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 点的对象(红色)。我有旋转点(蓝色)。
如何围绕蓝点旋转对象?
【问题讨论】:
-
只是为了澄清:您是要对对象应用旋转,还是对对象的顶点应用旋转?换句话说,您是否试图通过更新顶点来保持旋转,而不是简单地保持一个变换矩阵?
-
是的。确切地说。我希望轮换保持不变。
-
@Niels 您需要转换几何体,以便所需的旋转点映射到世界原点。然后应用旋转。然后应用反向翻译。
-
@WestLangley 谢谢,我使用 TheJim1 答案旋转,但是当我使用世界作为 pointInWorld 时使用本地点作为值
标签: javascript three.js