2009年07月06日
補間(rotation編)っす
弾薬倉庫でゴソゴソしてるっす。(昨日の流れ参照)
どうもぺんぎんっす( ◎v◎ )
ベクトルの回転については今度っす。
rotationだけの場合っす。
「最初の姿勢」から「最終の姿勢」まで一気に変化させるなら、
llSetRot(最終の姿勢)としてしまえば良いっす。
ちょっとずつSetRotとかで回す場合っす。
Case1.最初と最後の姿勢のオイラー角が既知
プリムをコネコネして、最初の角度と終わりの角度を決めて、
あとは回すだけ・・・って、アレ?というケースっす。
妙な角度から、妙な角度への変化っすから、妙なことになるっす。
1.とりあえずEuler2Rotでrotatioinにしておく
rot_startとrot_endとしておくっす。
2.姿勢を変化させるrotation(rot_act)を作る
rot_actは関係式
rot_end = rot_start * rot_act
で表わされるrotationっす。
両辺に左から(ZERO_ROTAION / rot_start)をかけると、
ZERO_ROTATION / rot_start * rot_end = rot_act
となって、これが求めるrot_actっす。
3.rot_actをいじる
startからendまで何度?ということがrot_actで分かるっすね。
もちろん軸も分かるっす。
軸はそのままで回転角をいじれば、思い通りに回転できるっす。
途中の姿勢 =
rot_start * llAxisAngle2Rot(llRot2Axis(rot_act), おまかせ)
for文で回すなり、お好きにどうぞっす。
Case2.最初の姿勢、回転軸が既知
えーっと・・・ドアっす。
蝶番のところが軸で、回転角はテキトーっす。
実際(RL)のドアに蝶番は2つ付いてるっすね。
その蝶番の座標を引き算すると軸が出るっす。
必要なくてもプリム2つをペタペタくっつけてGetPosさせて、
座標が取れたら外せばOKっすね。
そのままだと気持ち悪いっすから、正規化ヨロシクっす。
軸が分かっていれば必要ない作業っすけどね。
1.まずはEuler2Rot
rot_startとするっす。
2.途中の姿勢 =
rot_start * llAxisAngle2Rot(軸, テキトー)
回転軸さえ分かっていれば簡単っすね。
パスカットあり・なし問わず、回転については共通っす。
あり・なしで変わるのは、移動する・しないってところっす。
ベクトルの回転は始点を移動させるので手間が増えるっすけど、
基本は同じく「軸」と「回転角」っす。
ベクトルについては今度っす。
どうもぺんぎんっす( ◎v◎ )
ベクトルの回転については今度っす。
rotationだけの場合っす。
「最初の姿勢」から「最終の姿勢」まで一気に変化させるなら、
llSetRot(最終の姿勢)としてしまえば良いっす。
ちょっとずつSetRotとかで回す場合っす。
Case1.最初と最後の姿勢のオイラー角が既知
プリムをコネコネして、最初の角度と終わりの角度を決めて、
あとは回すだけ・・・って、アレ?というケースっす。
妙な角度から、妙な角度への変化っすから、妙なことになるっす。
1.とりあえずEuler2Rotでrotatioinにしておく
rot_startとrot_endとしておくっす。
2.姿勢を変化させるrotation(rot_act)を作る
rot_actは関係式
rot_end = rot_start * rot_act
で表わされるrotationっす。
両辺に左から(ZERO_ROTAION / rot_start)をかけると、
ZERO_ROTATION / rot_start * rot_end = rot_act
となって、これが求めるrot_actっす。
3.rot_actをいじる
startからendまで何度?ということがrot_actで分かるっすね。
もちろん軸も分かるっす。
軸はそのままで回転角をいじれば、思い通りに回転できるっす。
途中の姿勢 =
rot_start * llAxisAngle2Rot(llRot2Axis(rot_act), おまかせ)
for文で回すなり、お好きにどうぞっす。
Case2.最初の姿勢、回転軸が既知
えーっと・・・ドアっす。
蝶番のところが軸で、回転角はテキトーっす。
実際(RL)のドアに蝶番は2つ付いてるっすね。
その蝶番の座標を引き算すると軸が出るっす。
必要なくてもプリム2つをペタペタくっつけてGetPosさせて、
座標が取れたら外せばOKっすね。
そのままだと気持ち悪いっすから、正規化ヨロシクっす。
軸が分かっていれば必要ない作業っすけどね。
1.まずはEuler2Rot
rot_startとするっす。
2.途中の姿勢 =
rot_start * llAxisAngle2Rot(軸, テキトー)
回転軸さえ分かっていれば簡単っすね。
パスカットあり・なし問わず、回転については共通っす。
あり・なしで変わるのは、移動する・しないってところっす。
ベクトルの回転は始点を移動させるので手間が増えるっすけど、
基本は同じく「軸」と「回転角」っす。
ベクトルについては今度っす。
Posted by ぺんぎん at 21:52│Comments(0)
│スクリプト