# [[Three.js]] における回転
ふた通り。
- [[3 × 3 回転行列|オイラー角]]による指定
- [[3 × 3 回転行列|クォータニオン]]の利用
## オイラー角による指定
[[度数法と弧度法|ラジアン (radian)]] で指定する。
```js
radian = degree * Math.PI / 180
```
$\alpha$, $\beta$, $\gamma$ は[[度数法と弧度法|ラジアン]]。
```js
obj.rotation.set(α, β, γ);
```
または。
```js
obj.rotation.z = γ;
obj.rotation.y = β;
obj.rotation.x = α;
```
順番に注意。
Three.js は z - y - x (たぶん)
- [[ジンバルロック]]が起こる可能性がある
- x, y, z ごとに各 1 回しか回転できない
- 複数回なら行列を使う
## クォータニオンの利用
[[ジンバルロック]]が起こらない。
↓ 古い書き方(新しいバージョンでは書かなくてよい)
```js
obj.useQuoternion = true;
```
[[同時変換行列]]を利用する場合。
```js
const matrix = new THREE.Matrix4();
matrix.set(
m.rot_0, m.rot_1, m.rot_2, m.pos_x,
m.rot_3, m.rot_4, m.rot_5, m.pos_y,
m.rot_6, m.rot_7, m.rot_8, m.pos_z,
0, 0, 0, 1
);
// クォータニオンに変換
const quaternion = new THREE.Quaternion();
quaternion.setFromRotationMatrix(matrix);
// Three.js のオブジェクトにクォータニオンを適用
obj.quaternion.copy(quaternion);
```
### Example
[Marker 3D - Multi w/ quaternion](https://codepen.io/hibi-myzk/pen/JjxwqVw)