Я хочу повернуть цилиндр в определенном топе, сделанном двумя точками p1 и p2. Я создаю цилиндр с высотой l, равным расстоянию между двумя точками, и поставлю его посередине этого топора.three.js вращает объект по направлению оси
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, чтобы получить матрицу rotaion необходимую между двумя точками и применить его к матрице вращения цилиндра
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);
Я не вижу, что это неправильно, или, может быть, есть другой способ сделай это?
Отлично работает! – alex