頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


SceneKitでオブジェクトの速度・角速度が取得できない

SCNNodeオブジェクトの位置・姿勢が取得できない
↑ここで、SceneKitにおいてオブジェクトの位置、姿勢(クォータニオン )を得るのにpresentationNodeを使わないとダメ、という話をしてるけど、今回は速度、角速度を得ようとしてはまったというお話。もちろん物理エンジンを使ってる。

振り子

オブジェクトはいつもの(?)振り子だ。棒の上部をSCNPhysicsHingeJoint使って”世界”に固定してる(支持してる板は飾り)。

このSCNNodeオブジェクトの速度、角速度なので
node.physicsBody.velocity
node.physicsBody.angularVelocity
で取得できると思うやん?

もう半分罠にかかってるで。

結論から言うと
- (void)renderer:(id)renderer updateAtTime:(NSTimeInterval)time;
などのSCNSceneRendererDelegateメソッド内でないと意図する値を得ることができなかった。

例えば、
・画面をクリックした時にコールされるメソッド
・タイマーでコールされるメソッド
なんかでは値がどれもゼロになってしまう。
なんでやあ〜?って叫ぶ前によくリファレンス読んだら書いてた。
さっきの
- (void)renderer:(id)renderer updateAtTime:(NSTimeInterval)time;
などのSCNSceneRendererDelegateのメソッド内はOK。
でもその他のメソッドだと前にsetされた値を返すよって書いてる。

えええ?なにそのトラップ。
確かにセットした後に調べると値はゼロじゃないなあ、、、謎仕様や、、、
まあいいや。深く考えるのはよそう、だってSceneKitだもの(みつを)。

<< 強化学習(DQN)に強引にSceneKitの物理エンジンを使う  TopPage  強化学習(DQN)で報酬のクリッピング >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1149-4d890288




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad