Open3

Vector、Rotationメモ

udonudon

ワールド座標をローカル座標に変換

Inverse Transform Location

あるワールド座標を、特定のアクタのローカル座標に変換する。
T:あるアクタ内のローカル座標に変換したい場合、そのアクターのTransformを入れる。
Location:ローカル座標にしたいワールド座標を入れる。

Tにアクタコンポーネントのワールド座標を入れた場合。
アクタコンポーネントからの相対座標を算出できる。

参考

https://wakagamestudio.hatenablog.jp/entry/2021/06/09/174412

udonudon

Vectorメモ

Vectorは2つの意味を持っている。

・位置
・方向
Vectorの値の中にはこれらの意味が含まれている。
Set Actor Location を使っていると、Vectorは位置を扱うものなんだなと思うけど、方向も含まれている。

ワールドの向き、Actorの向き

ワールドの向き、Actorの向き(ローカル)、この二つは区別しなければならない。自分のような初学者は、ここの区別ができず混同してしまう。

Get Actor Forward Vector

Actorの前方を意味するVector。
以前の自分はGet Actor Forward Vector が(x:1,y:0,z:0)を返すものだと思っていた。
Actorを回転させて、Get Actor Forward Vectorをやると、Actorの向いている方向に応じて値が変わる。

Get Actor Location + (Get Actor Forward Vector * 100(float))とかやると、Actorの前方100cm先の座標を得られる。

参考になった動画

https://youtu.be/0gvPOLEBbqE

短いし、図解があるのでわかりやすかった。
英語がわからなくても図解を見ることでなんとなく理解ができそう。
内積(Dot Product)、外積(CrossProduct)の説明もあり。

回転(Rotate、クォータニオン)

回転と軸

棒をある方向へ傾けたい場合。
Xを30度,Yを90度,Zを...といった感じでもうややこしい。
回転は1つの軸回転で表現できるため、その軸を求めてしまった方が良いっぽい。
以下はすごく参考になった動画。

https://www.youtube.com/watch?v=uKWLPU8gfIY&t=2021s

ある回転後の結果がほしい場合、「Rotate from Axis and Angle」ノードを使って、1つの回転軸と角度で求めることができる。
角度は内積。回転軸は外積で求められる。

内積・なす角(Dot Product)

あるベクトルと、あるベクトル間の角度の算出に使える。
Dot Productノードの出力ピンをAcosd(度単位)ノードに繋がないと角度は取得できない。
使用場所の想定:Rotate系ノードのAngleという入力ピンでの使用など。
例えば、Actor(A)のUpVectorとか、Actor(B)のRightVectorとか、とにかく2つのベクトルをDot Productの入力ピンににいれるとベクトル同士の角度にどれだけの開きがあるかわかる。

外積(CrossProduct)

Axis(軸)を割り出す。軸はある方向へ伸びる直線。
使用場所の想定:Rotate系ノードのAxisという入力ピンでの使用など。
「Rotate from Axis and Angle」のAxisは回転させるための軸という意味っぽい。
ネジを締める場合や、コマを回す場合、それらはUnrealで言うところのZ軸を回転させている。
例えば、Actor(A)のUpVectorとか、Actor(B)のRightVectorとか、とにかく2つのベクトルをCrossProductの入力ピンに繋げることで、「入力した2つの軸に垂直な軸」を出力できる。そしてその軸は回転させるための軸として使える。

UnrealEngine上での動作

https://www.youtube.com/watch?v=O9pkcjFfKNQ

これもすごく参考になった。