座標軸を表すマトリックスワールドを理解しとけば三角関数やら複雑な式を使わなくてもメッシュの移動や変形が楽になるハズ。
定義
マトリックスワールドとはある座標軸の傾きと原点からの距離を表したもの
解説
図のように任意の座標軸をエンプティとすると分かり易い。
このエンプティのx軸、y軸、z軸の長さをxyz座標に分解した物と根本の座標(原点からの位置)を使う。
例題1
原点にある座標軸の矢印の先端の座標は
x→(1,0,0)
y→(0,1,0)
z→(0,0,1)
でそれぞれ原点からの距離はゼロなので
Matrix_worldは
Matrix((
(1.0, 0.0, 0.0, 0.0),
(0.0, 1.0, 0.0, 0.0),
(0.0, 0.0, 1.0, 0.0),
(0.0, 0.0, 0.0, 1.0)))
となる。
例題2
任意の位置にある座標軸のx、y、z軸の先端の座標は
x→(0.94473,1.0643,1.0887)
y→(-0.22649,1.8424,1.2399)
z→(-0.26589,0.45016,1.4852)
根元の座標は
(0.01699,1.0252,0.71753)
x、y、zから根元の座標を引く
(python上だと小数点以下の計算は小さい誤差がついてこんなきれいな値にならない)
x→(0.94473-0.01699,1.0643-1.0252,1.0887-0.71753)
=(0.92774, 0.0391, 0.37117)
y→(-0.22649-0.01699,1.8424-1.0252,1.2399-0.71753)
=(-0.24348, 0.8172, 0.52237)
z→(-0.26589-0.01699,0.45016-1.0252,1.4852-0.71753)
=(-0.28288, -0.57504, 0.76767)
>>> obj.matrix_world
Matrix((
(0.92774, -0.24348, -0.28288, 0.01699),
(0.0391, 0.8172, -0.57504, 1.0252),
(0.37117, 0.52237, 0.76767, 0.71753),
(0.0, 0.0, 0.0, 1.0)))