我有一个几何对象,并且尝试添加围绕该几何体的Torus网格。我想要做的是拥有原始几何图形,然后单击该几何图形时,它将在单击位置周围的线上添加一个Torus形状。但是,我无法使其正确旋转。
我将圆环显示在正确的位置,但是我无法将其定位在直线上。我正在使用raycaster来单击该点,所以我要单击该点的面部和faceindex。在我尝试使用旋转的每个实现中(使用setEulerFromRotationMatrix),它只是移动圆环网格的位置,而不是实际旋转它以允许线穿过圆环。
这似乎是微不足道的,但这给我带来了很多麻烦。我究竟做错了什么?我尝试了两种方法,都没有成功,并且表现出上述行为:
var rotationMatrix = new THREE.Matrix4();
rotationMatrix.makeRotationAxis(geometry.faces[fIndex].centroid.normalize(), Math.PI/2);
torusLoop.matrix.multiply(rotationMatrix);
torusLoop.rotation.setEulerFromRotationMatrix(torusLoop.matrix);
//attempt two, similar results to above attempt
tangent = geometry.tangents[segments/radiusSegments].normalize();
axis.crossVectors( up, tangent ).normalize();
var radians = Math.acos( up.dot( tangent ) );
matrix.makeRotationAxis( axis, radians );
torusLoop.rotation.setEulerFromRotationMatrix( matrix );
我需要圆环结来跟随样条曲线,但它只会保持平坦,旋转只会使它四处移动,而不会改变角度。
最佳答案
没关系,我知道了。对于那些想知道的问题,我在旋转之前进行了平移,这导致我的人物绕着另一个轴旋转。我的解决方案是先旋转然后平移,然后在创建网格后将其移动到我需要的位置。