座標変換

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() で取得できます。



Generated for ToyStudio SDK 1.6.1.3 by  Doxygen