Object3Dのattachを理解する
このとき、local変数はそのまま維持される
たとえばVR上で物を掴む時、シーン上のオブジェクトを掴んで、手の子要素にする
このとき、対象のworld座標を維持したい
これ(VRでみてね)
その時使えるのがattach
ただし上のexampleでは使われてない
attach自体が2019年あたりのもので、上のexampleの頃になかったのかも
code:js
attach: function(object) {
// adds object as a child of this, while maintaining the object's world transform
this.updateWorldMatrix(true, false);
_m1.getInverse(this.matrixWorld);
if (object.parent !== null) {
object.parent.updateWorldMatrix(true, false);
_m1.multiply(object.parent.matrixWorld);
}
object.applyMatrix(_m1);
object.updateWorldMatrix(false, false);
this.add(object);
return this;
}
まず差し込み先に対して、親方向にworld座標の更新をする
たしかに、指したいthis自体のworld座標がちゃんとしてないと、計算ができない
_m1はtmporaryな行列のインスタンスだろう
自身のworld行列の逆行列をまず入れる
指しこみたいobject自体が親をもつなら、
objectの親方向のworld行列を更新
object.parentのworld行列をかける
objectに行列をかける
最後に自分自身のみworld行列更新
最終的にはaddをしている
https://gyazo.com/3622a00a853eb7284ed1a543928382f6
把握できたのでメモ
気が向いたら清書する
もともとのobjectのworld座標系のtransformを保持しておいて、
attach先でも同じになるようにlocal座標をいじればいい
だから(差し込み先のworld座標の逆行列)* (元のworld)を、新しいlocal座標にすればいい