Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将网格旋转90度?_Javascript_Matrix_3d_Rotation_Three.js - Fatal编程技术网

Javascript 如何将网格旋转90度?

Javascript 如何将网格旋转90度?,javascript,matrix,3d,rotation,three.js,Javascript,Matrix,3d,Rotation,Three.js,我有一个网格,我想在三个JS内旋转90度。 以下是当前情况的图像: 我希望选定的网格与大网格平行旋转。 我尝试过这样旋转矩阵: matrix = new THREE.Matrix4().makeRotationX(1.57) 但是网格会进行奇怪的旋转。有没有更简单的方法把它旋转90度 假设meshToRotate需要在X轴上旋转90度。然后执行以下操作 var meshToRotate = new THREE.Mesh( geometry, material ); //Rotating

我有一个网格,我想在三个JS内旋转90度。 以下是当前情况的图像:

我希望选定的网格与大网格平行旋转。 我尝试过这样旋转矩阵:

matrix =   new THREE.Matrix4().makeRotationX(1.57)

但是网格会进行奇怪的旋转。有没有更简单的方法把它旋转90度

假设
meshToRotate
需要在X轴上旋转90度。然后执行以下操作

var meshToRotate = new THREE.Mesh( geometry, material );

//Rotating mesh by 90 degree in X axis.     
meshToRotate.rotateX( Math.PI / 2 );

threejs旋转使用弧度(您可能知道)

你可以用这个

mesh.rotation.x=Math.PI/2;

mesh.rotation.set(新的3.Vector3(0,0,Math.PI/2));

您可以使用此功能旋转对象:

function rotateObject(object, degreeX=0, degreeY=0, degreeZ=0) {
   object.rotateX(THREE.Math.degToRad(degreeX));
   object.rotateY(THREE.Math.degToRad(degreeY));
   object.rotateZ(THREE.Math.degToRad(degreeZ));
}

// usage:
rotateObject(myPlane, 40, 30, 20);

经过r96测试,您也可以使用

mesh.rotation.setFromVector3(new THREE.Vector3( Math.PI / 2, 0, 0));

object.rotation.y=3.Math.degToRad(90);工作得很好。谢谢<代码>mesh.rotation.set(新的3.Vector3(0,0,Math.PI/2))不在r96上工作。使用
setFromVector3
而不是
set
mesh.rotation.set(0,0,Math.PI/2)
可以使用r101。使用带有矢量3的
rotation.set()
在属性
matrix
matrixWorld
中提供
NaN
值,这会使对象从场景中消失,在控制台中不显示任何内容。这是因为
mesh.rotation
THREE.Euler
而不是
THREE.Vector3
,这是另一种对象类型。不好的
THREE.Math.degToRad()
THREE.Math.radToDeg()
,因为它会触发3次矩阵乘法,而不是1次。如果您想与单个网格交互(例如,用户操纵),则可以,但如果您重复调用该操作(例如动画…
mesh.rotation.set(Math.PI/2,0,0)),则不建议使用该操作mesh.updateMatrix()函数