three.js按轴方向旋转对象

时间:2014-12-08 13:25:34

标签: vector rotation three.js quaternions

我想在由两个点p1和p2构成的某个斧头上旋转一个圆柱体。 我创建了高度l等于两点之间距离的圆柱体,我把它放在那个斧头的中间。

var xd = p2.x - p1.x,
yd = p2.y - p1.y,
zd = p2.z - p1.z,
l = Math.sqrt(xd*xd + yd*yd + zd*zd);
var cylinder = new THREE.Mesh( new THREE.CylinderGeometry( 5, 5, l, 32 ), new THREE.MeshBasicMaterial( {color: "#ffffff"} ) );
cylinder.position.set(p1.x+xd/2, p1.y+yd/2, p1.z+zd/2);

我使用setFromUnitVectors获取两点之间所需的旋转矩阵并将其应用于圆柱体的旋转矩阵

var quaternion = new THREE.Quaternion();
quaternion.setFromUnitVectors(new THREE.Vector3(p1.x,p1.y,p1.z).normalize(),new THREE.Vector3(p2.x,p2.y,p2.z).normalize());
cylinder.rotation.setFromQuaternion(quaternion);

我看不出有什么问题,或者有其他办法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

另一种方法是,如果p2是向量,只需制作圆柱体LookAt(p2)