劇情簡介
在Three.js的場景中,加載三維模型,需要對模型參照x、y、z三個軸的角度旋轉進行設置。
在加載三維模型的時候,可以直接設置模型的三個軸的rotation屬性:
model.rotation.x=-Math.PI / 4;
model.rotation.z=Math.PI / 4;
model.rotation.y=Math.PI / 2;
但是,在實際的場景中,這樣設置模型展示的結果是不正確的,按照Three.js的說明文檔中,在場景中模型的變換,需要通過矩陣進行變換。
具體的代碼實現方式如下:
//模型對象旋轉的函數,每次設置一個坐標軸的變換
function rotateAroundWorldaxis(object, axis, radians) {
let rotWorldMatrix=new THREE.Matrix4;
rotWorldMatrix.makeRotationaxis(axis.normalize, radians);
rotWorldMatrix.multiply(object.matrix);
object.matrix=rotWorldMatrix;
object.rotation.setFromRotationMatrix(object.matrix);
}
//調用方式,設置x、y、z軸的旋轉
let xaxis=new THREE.Vector3(1, 0, 0);
let yaxis=new THREE.Vector3(0, 1, 0);
let zaxis=new THREE.Vector3(0, 0, 1);
//模型、旋轉軸和旋轉角度(弧度)
rotateAroundWorldaxis(model, xaxis, Math.PI / 8);
對于之前版本的Three.js,函數實現的有些不同
// Three.js r49之前:
object.rotation.getRotationFromMatrix(object.matrix, object.scale);
// Three.js r59之前:
object.rotation.setEulerFromRotationMatrix(object.matrix);
對于Three.js中現有一些形狀對象,直接設置三個軸的變換就行,不需要這樣進行變換。