【发布时间】:2015-02-06 04:07:14
【问题描述】:
我想在由两点 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);
我看不出有什么问题,或者也许有其他方法可以做到这一点?
【问题讨论】:
标签: vector rotation three.js quaternions