シーンの階層構造と行列(マトリクス)の関係
Shade3Dでは「ブラウザ」でシーンの階層構造が表示されています。
形状が階層構造を持つ場合に形状の位置や回転、スケールは内部的に「行列」(マトリクス)で管理されます。
ブラウザで選択したパートの行列は、形状情報ウィンドウの「パート属性」の「マトリクス」タブで
3 x 4の実数値で表示されます。内部的には4 x 4行列で管理されます。
行列には、「スケール」「せん断」「回転」「移動」要素が格納されています。
「変換要素」タブを選択するとそれぞれの要素が表示されます。
「変換要素」は、行列から計算される要素になります。
内部的には行列のみを持っており、行列と変換要素は計算にて相互変換できます。
パートだけでなくすべての形状は行列を持ち、
この行列を子から親パートにかけ合わせていくことで、シーンのワールド座標での位置や回転を計算できます。
上画像の「円の掃引体」の場合は、ワールド座標への変換行列は
ワールド座標での行列 = 「円の掃引体」の行列 x 「パート2」の行列 x 「パート1」の行列 x 「ルートパート」の行列
のように計算できます。
スクリプトでshapeの形状のワールド座標変換行列を計算する場合、
以下のように「shape.local_to_world_matrix」を使用して求めることができます。
# 選択形状を取得.
scene = xshade.scene()
shape = scene.active_shape()
# ローカルからワールド座標に変換する行列を取得.
wlMat = shape.local_to_world_matrix
print wlMat
ジョイントを使用している場合は、モーション指定により行列値が変化することになります。