【Shade】移動前移動後の点のセットから座標変換マトリックスを作る
さっきのポーズとる前→ポーズとった後の変換行列を求めて差し替え用のパーツを在るべき位置にはめ込むというやつは解決しましたのでやり方をご紹介.
まず変換前と変換後の座標をそれぞれ次のように置きます.
- 変換前 ,変換後
変換行列は4×4の行列になるので変換前と変換後の対が4組あれば方程式が立てられます.
このa~pを決定できれば問題解決です.
pythonに解いてもらって完成.
import numpy as np
# 行列x
matBefore = np.array([
[-5.889599323272705e-01, 4.797607362270355e-01, 5.793557167053223e+00, 1.0],
[-4.870399534702301e-01, -6.359863281250000e-02, 5.654996395111084e+00, 1.0],
[ 0.000000000000000e+00, -1.063110381364822e-01, 5.825235843658447e+00, 1.0],
[ 0.000000000000000e+00, 4.501586854457855e-01, 5.965075969696045e+00, 1.0]
]).T
# 行列x^\prime
matAfter = np.array([
[ 4.853953361511230e+00, 5.070699310302734e+01, 1.770071029663086e+01, 1.0],
[ 4.817562103271484e+00, 5.016485214233398e+01, 1.752869987487793e+01, 1.0],
[ 5.278203964233398e+00, 4.999197006225586e+01, 1.768973922729492e+01, 1.0],
[ 5.416565895080566e+00, 5.052135086059570e+01, 1.786248016357422e+01, 1.0]
]).T
matTransform = np.dot(matAfter, np.linalg.inv(matBefore))
print matTransform
目をコピーしてきてはめ込み.無事に収まりました.
【Shade】座標変換を使おう計画
3DCGでキャラクターにポーズをとらせたあとに,目のパーツだけポーズとる前の座標系で作り直して差し替えようという計画で作業しています.
表情はいじっていないので,顔のジオメトリをガイドにポーズとる前→ポーズとった後の変換行列を求めて差し替え用のパーツを在るべき位置にはめ込むという段取りだったんだけど,3次元の座標変換のコードを扱った経験がないので,具体的な事が判らず今さらお勉強中.
シーンに配置した後に「これ差し替えたい」って場面は(無いのが理想ですが現実には)結構あるのでやり方覚えてスキルアップしておこう.