講座が終わったので、こっちも書いていくっす。
まだもうちょっと講座関係の書きものが残ってるんっすけどね。
どうもぺんぎんっす( ◎v◎ )
PRIM_ROT_LOCALなんてフラグが追加されてたので、
ちょっと解説っぽいのを書いておくっす。
自分は元々rotationバグなんて無いと思ってるっすから、
そのことについてっす。
vectorもrotationも似たようなもんなので、vectorからっす。
珍しく図を描いてみたっす。
だいたい見れば分かるっすよね。
OがSIMの南西角、高度0mの(0, 0, 0)
Pがルートプリムの位置
Qが子プリムの位置っす。
SLPPの引数に入れるのはPQっす。
これの表し方にグローバル基準とかローカル基準とかあるっす。
どっちでも同じPQなのが注意点っすね。
ベクトルなら上に例のアレを付けるべきなんっすけど、
いろいろと面倒なので大文字で許してくださいっす。
まずは「グローバル」からっす。
これは単純っす。
PQをOPとOQで表せば良いっす。
PQ = OQ - OP
これでOKっす。
「Oから見てQの位置に移動させる」
っていうのをこの式は表わしてるっす。
次は「ローカル」っす
「P(ルートプリム)から見てQの位置に移動させる」
ということをしたいわけっすね。
ということは、QをOPだけ平行移動した点をQ'とすると
PQをOQ' + なんとか のカタチにすれば良いっす。
PQ = OQ - OP ―①
QをOPだけ平行移動した点がQ'だから
OQ + OP = OQ'―②
∴OQ = OQ' - OP ―③
③を①に代入すると
PQ = OQ' - OP - OP
具体的な数字を入れてみるっすかね。
(算数の話なので、floatなのに.0無いね!とかはナシっす)
O = (0, 0, 0), P = (1, 2, 3), Q = (4, 5, 6)
としてみるっす。
ルートプリムが今、Pの位置にあって、
子プリムをQの位置に移動させたいと思ってるわけっす。
「グローバル」でやってみるっす。
PQ = OQ - OP
= (4, 5, 6) - (1, 2, 3)
= (3, 3, 3)
「ローカル」でもやるっす。
OQ'は②式からOQ' = OQ + OP っす。
さっき書いた「Pから見てQの位置」っていうのはこの部分っす。
OQ' は計算すると (4, 5, 6) + (1, 2, 3) で (5, 7, 9) っすね。
PQ = OQ' - OP - OP
= (5, 7, 9) - (1, 2, 3) - (1, 2, 3)
= (3, 3, 3)
当然一致するわけっす。
ほら、何となくrotationと同じ雰囲気っすよね?