2014-12-08 6 views
1

두 점 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); 

나는 두 점 사이에 필요한 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); 

내가 해달라고 실린더의 회전 행렬에 적용 setFromUnitVectors를 사용하거나 아니면 다른 방식이있다 해?

답변

0

또 다른 방법은 p2가 벡터 인 경우 실린더를 LookAt(p2)으로 만드는 것입니다.

+0

완벽하게 작동합니다! – alex