如何围绕另一个Vector3旋转Three.js Vector3?

时间:2013-10-04 13:10:02

标签: javascript three.js

这里我想围绕'startpoint'向量旋转'端点'向量。

这会绕全世界的z轴旋转端点矢量:

 endpoint.copy(new THREE.Vector3(startpoint.x,startpoint.y,startpoint.z));
 endpoint.add(new THREE.Vector3(0, scale, 0 ));

 var matrix = new THREE.Matrix4().makeRotationAxis( axis_z, angle );
 endpoint.applyMatrix4( matrix );

我试图将矢量的转换保存到临时矩阵,并在应用旋转后,将转换恢复到端点矢量:

 endpoint.copy(new THREE.Vector3(startpoint.x,startpoint.y,startpoint.z));
 endpoint.add(new THREE.Vector3(0, scale, 0 ));  

 var translateMatrix = new THREE.Matrix4().makeTranslation(endpoint.x, endpoint.y,   endpoint.z);
 var translation = new THREE.Matrix4().copyPosition(translateMatrix); 
 translateMatrix.makeRotationAxis(axis_z, angle);
 translateMatrix.copyPosition(translation);
 endpoint.applyMatrix4(translateMatrix);

此代码适用于旋转,但所有翻译都是错误的。 是否有一种简单的方法可以相对于另一个向量进行向量旋转?

UPD。解决了这一点。我是瞎子。无需翻译。我必须做的事情:将旋转应用于矢量增量(端点 - 起点),最后,将旋转的增量添加到起点(起点+增量):

var vector_delta = new THREE.Vector3().subVectors(endpoint, startpoint);
vector_delta.applyAxisAngle( axis_z, rota );
endpoint.addVectors(startpoint, vector_delta); 

0 个答案:

没有答案