TOYSTUDIO SDK  1.6.1.3
 全て クラス ファイル 関数 変数 型定義 列挙型 列挙型の値 マクロ定義 グループ ページ
座標変換

TOYSTUDIOの表示に使用している座標変換の詳細です。

座標系

OpenGLなどと同じ右手座標系で、各座標軸の方向は以下のようになっています。

ts_coord_sys.jpg

ベクトル、行列の形式

TOYSTUDIOではベクトルとして行ベクトル形式を使用していますので、ベクトル $v$

\[ v= \left( \begin{array}{ccc} x & y & z \\ \end{array} \right) \]

となり、各要素は行方向に並びます。ベクトルに4×4行列を掛ける場合、

\[ \left( \begin{array}{cccc} x' & y' & z' & w' \\ \end{array} \right) = \left( \begin{array}{cccc} x & y & z & w \\ \end{array} \right) \left( \begin{array}{cccc} m_{11} & m_{12} & m_{13} & m_{14} \\ m_{21} & m_{22} & m_{23} & m_{24} \\ m_{31} & m_{32} & m_{33} & m_{34} \\ m_{41} & m_{42} & m_{43} & m_{44} \\ \end{array} \right) \]

のように行列を右から掛けます。これはDirectXなどと同じ形式です。

ローカル変換行列

オブジェクトのピボット、スケール、せん断、回転、移動の変換行列をそれぞれ、 $P$$S$$H$$R$$T$とすると、 親オブジェクトの座標系におけるオブジェクトのローカル変換行列 $M$

\[ M = P\,S\,H\,R\,T \]

となります。 例外的に、 オブジェクトがジョイント タイプ(TA_OBJECT_JOINT)で以下の条件を満たす場合、

  1. 親もジョイント タイプ(TA_OBJECT_JOINT)。
  2. 「親ジョイントのスケールを補正」(CTaObject::GetJointParentScaleCompensated())の値がTRUE。
  3. 親ジョイントのスケール値が(1, 1, 1)以外。

親ジョイントのスケールの逆行列を $S_p^{-1}$とすると、 オブジェクトのローカル変換行列 $M$

\[ M = P\,S\,H\,R\,S_p^{-1}\,T \]

となります。

オブジェクトのローカル変換行列は、 CTaObject::GetTransform() で取得できます。

ワールド変換行列

オブジェクトのローカル変換行列を $M_0$、その親オブジェクトのローカル変換行列を $M_1$、 さらにその親オブジェクトのローカル変換行列を $M_n\cdots$とすると、 オブジェクトのワールド変換行列 $M_w$

\[ M_w = M_0\,M_1\,M_2\,M_n\,\cdots \]

となります。

オブジェクトのワールド変換行列は、 CTaObject::GetWorldTransform() で取得できます。