[name]

Three.jsは行列(*matrices*)を使って3次元変換(位置の変換、回転、スケーリング)をエンコードします。 すべての[page:Object3D]インスタンスは、そのオブジェクトの位置や回転、スケールを保存した行列([page:Object3D.matrix matrix])を持っています。このページではオブジェクトの3次元変換をどうやって行うかを説明しています。

Convenience properties and *matrixAutoUpdate*(便利なプロパティとmatrixAutoUpdate)

オブジェクトの変換を更新するには二つの方法があります。

  1. オブジェクトの*position*や*quaternion*(四元数)やスケールのプロパティを変更することで、three.jsに オブジェクトの行列を再計算させます。 object.position.copy( start_position ); object.quaternion.copy( quaternion ); デフォルトでは、*matrixAutoUpdate*のプロパティはtrueで、行列は自動的に再計算されます。 オブジェクトが静的な場合や、再計算するタイミングを制御したい場合は、このプロパティをfalseに設定することでパフォーマンスが改善する可能性があります。 object.matrixAutoUpdate = false; プロパティを変更した後には、行列を手動で更新してください。 object.updateMatrix();
  2. オブジェクトの行列を直接修正する方法です。 [page:Matrix4]クラスには行列を変更するための様々なメソッドがあります。 object.matrix.setRotationFromQuaternion( quaternion ); object.matrix.setPosition( start_position ); object.matrixAutoUpdate = false; この場合 *matrixAutoUpdate*は*false*に設定しなくてはならないことに注意してください。 また*updateMatrix*を呼ばないようにしてください。 *updateMatrix*を呼ぶと、行列にマニュアルで加えた変更がなくなり、位置やスケールなどから行列が再計算されます。

Object and world matrices(オブジェクトとワールド座標系での行列)

オブジェクトの行列([page:Object3D.matrix matrix])は、[page:Object3D.parent parent](親オブジェクト)に対する相対的な変換を保持しています。 ワールド座標系でのオブジェクトの変換を取得するには、オブジェクトの[page:Object3D.matrixWorld]にアクセスする必要があります。

親オブジェクトや子オブジェクトの変換が変更された場合は、[page:Object3D.updateMatrixWorld updateMatrixWorld]()を呼び出すことで、子オブジェクトの[page:Object3D.matrixWorld matrixWorld]の更新を要求することができます。

Rotation and Quaternion(回転と四元数)

three.jsでは3次元の回線を表すためにオイラー角([page:Euler Euler angles])と4元数([page:Quaternion Quaternions])という2つの方法があります。 また、three.jsではこの2つの間の変換メソッドも提供されています。 オイラー角はgimbal lockと呼ばれる問題の影響をうけることがあります。 gimbal lockが発生すると、特定の設定のときにオブジェクトの回転の自由度が失われます(オブジェクトが特定の軸方向に回転できなくなります) このため、オブジェクトの回転はつねにオブジェクトの4元数([page:Object3D.quaternion quaternion])に保持されます。

以前のバージョンのライブラリには*useQuaternion*プロパティがあり、これをfalseに設定すると、 オブジェクトの行列([page:Object3D.matrix matrix])がオイラー角から計算されるようになっていました。 このやり方は古くなってきたので、代わりに[page:Object3D.setRotationFromEuler setRotationFromEuler]メソッドを使用して、 四元数を更新します。