ポリゴンメッシュ形状のローカル座標での中心

Shade3Dでのポリゴンメッシュは他の形状と異なり、変換要素(内部では変換行列)を持ちません。
そのため、移動や回転を行うとポリゴンメッシュのローカル座標での中心は常に変化します。
※ なお、これはあくまでもShade3Dでポリゴンメッシュを扱う際のルールになります。
他の3DCGツールの大部分では、ポリゴンメッシュ含むすべての形状は変換行列を持っています。

変換要素は、スケール/せん断/回転/移動を表す要素です。
「マトリクス」と「変換要素」は相互に変換できます。
以下はパートの場合の変化要素です。

Shade3Dのポリゴンメッシュは、この変換要素は常に
スケール (1, 1, 1)/せん断 (0, 0, 0)/回転 (0, 0, 0)/移動 (0, 0, 0)になります。
変換行列で言うと、単位行列が入っている状態です。
このとき、ポリゴンメッシュの各頂点座標は親のパートから見たローカル座標が使用されます。
ポリゴンメッシュ形状をスケール/せん断/回転/移動した場合は、ポリゴンメッシュの全頂点が再変換されることになります。

以下は、パートの移動要素が(650, -400, 100)、その中にポリゴンメッシュを配置しています。

赤い球がパートの中心に相当します。
パートの変換要素は以下のように指定しています。

このときのポリゴンメッシュのローカル座標での中心は(-650, 400, -100)となります。

選択形状がポリゴンメッシュの場合、形状のローカル座標での中心を求めるPythonスクリプトは以下になります。


scene = xshade.scene()
shape = scene.active_shape()

if shape.type == 7:   # ポリゴンメッシュの場合
  px = py = pz = 0.0
  versCou  = shape.total_number_of_control_points
  for i in range(versCou):
    v = shape.vertex(i).position
    px += v[0]
    py += v[1]
    pz += v[2]
  
  px /= float(versCou)
  py /= float(versCou)
  pz /= float(versCou)
  
  print "center " + str(px) + " , " + str(py) + " , " + str(pz)
この記事のURLとタイトルをコピーする
Translate »