这里我想围绕'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);