Pythonによるオブジェクトの角速度設定について

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2013/6/21 16:29
7ike  新米   投稿数: 3
初歩的なことかもしれませんが,検索をしても納得のいく答えを見つけ出すことができなかったため質問させていただきました.

Blender Gameにおいて,ControllerとしてPythonを使い,あるオブジェクトを初期状態(位置:[0,0,5],姿勢:[[1,0,0],[0,1,0],[0,0,1]],速度:[0,0,0],角速度:[0,0,0])にする以下のスクリプトを書きました.

import bge

object = bge.logic.getCurrentController().owner
object.worldPosition = [0.0, 0.0, 5.0]
object.worldOrientation = [[1.0, 0.0, 0.0],[0.0,1.0,0.0],[0.0,0.0,1.0]]
object.worldAngularVelocity = [0.0,0.0,0.0]
object.worldLinearVelocity = [0.0, 0.0, 0.0]

次いで,初期のCubeにRigid BodyのPhysical Typeを与えてz軸方向に+5だけ動かし,[0,1,0]にPlaneを追加してStaticとし,衝突するとCubeが回転しながら下方向に落ちていくような環境を作り,スペースキーを押すことでこのスクリプトを実行するようにLogic Brickを設定して試したところ,角速度以外の値は指定したとおりになるのですが,角速度はスペースキーを押す前と同じ値のままで[0,0,0]に設定することができませんでした.
また,setAngularVelocityメソッドも使って見ましたが,同様に角速度を変更することはできませんでした.

悩みながらいろいろ試して見たところ,指定する3次元ベクトルの少なくとも1つの要素に非0の値をいれる(例えば[0, 0, 0.00000001]を設定する)と角速度が変わることが分かり,やりたかったことはほぼ達成されたのですが,なぜこのようなことになったのか非常に疑問で,もしかすると根本的に何か間違っているのではないか心配になってしまいました.
今のところ,少なくともBlender2.62と2.67bの双方で起こることを確認しました.

この問題について,何かご存知の方がおられましたらご教示いただきたく思います.

長文失礼致しました.
よろしくお願いいたします.
投票数:7 平均点:8.57
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2013/6/21 17:04
完全無欠猫  長老 居住地: 兵庫  投稿数: 750
ソースでsetAngularVelocityを簡単に調べただけですが
ベクトルが定まらない場合は値を設定していないように思いますが・・・。
投票数:1 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2013/6/21 18:33
7ike  新米   投稿数: 3
完全無欠猫さま,

お返事ありがとうございました.
ソースの中で(0,0,0)の場合は値を設定しないと教えていただき,すっきりした気持ちもあるのですが,
「なぜ,worldLinearVelocityについては(0,0,0)で各軸に沿った速度を設定できるのに,worldAngularVelocityについては(0,0,0)で各軸周りの角速度が設定できないのか」不思議に思えてしまいます.
(もしかして,オブジェクトの速度,角速度を0にするというメソッドが別に用意されているのでしょうか?)

もし,なぜ速度ベクトルは(0,0,0)が大丈夫で角速度ベクトルはそれが駄目なのか理由や経緯などをご存知でしたら教えていただきたく思います.

面倒を言っているようで恐縮ですがよろしくお願いいたします.
投票数:7 平均点:2.86
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2013/6/24 8:13
完全無欠猫  長老 居住地: 兵庫  投稿数: 750
前回の投稿時にはworldLinearVelocityについては調べていません。
worldLinearVelocityについて検索するとworldAngularVelocityと同様の処理をしています。

PyVecToという関数でベクトルを生成しています。
またPyVecTo関数内で座標系に沿った検証がされています。
不適切な値の場合には同じく設定はされません。

各関数を検索してコードにさらっと目を通しただけなので詳しくは調べていません。
実際のところ、どのように処理されているのか興味がお在りでしたら
VSNのソースをDLされて調べてみてはどうでしょうか?

それと誤解をされていそうなので訂正します。
前回の投稿で私は(0,0,0)の場合に設定しないとは書いていません。
ベクトルが定まらないと書いています。
数学的な知識が深くありませんので明確に書けませんが
前回投稿時にベクトルが定まらないとはPyVecToで正常にベクトルが生成されなかったときの事を意味していました。
そもそも角速度0ってどこ向いてるの?(それは一意なベクトルでしょうか?)というのが個人的な感想です。
投票数:6 平均点:6.67
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2013/6/25 14:27
7ike  新米   投稿数: 3
完全無欠猫さま,

ご返答有難うございました.

> 前回の投稿時にはworldLinearVelocityについては調べていません。
> worldLinearVelocityについて検索するとworldAngularVelocityと同様の処理をしています。

worldLinearVelocityに(0,0,0)を設定するとそのオブジェクトの各軸に沿った速度はゼロになる
(停止する)ので,違う理由かもしれません.
ご指摘のとおり,ソースをダウンロードして調べたいと思います.

> そもそも角速度0ってどこ向いてるの?(それは一意なベクトルでしょうか?)というのが個人的な感想です。

全ての要素が0のベクトルは零ベクトルです.これをベクトルとしないと,ベクトルを足したり引いたりして
全ての要素が0になった場合や0倍した結果がベクトルにならなくなってしまいます.
物体が動いていない時,その速度は0で「速度0でどっちの方向に動いているか」は定まらないので,
その状態を零ベクトルで表現するのは自然なことの様に思います.

worldLinearVelocityの場合,(0,0,0)という零ベクトルを設定することで「止まった状態」を実現できます.
私の疑問は,回転運動の場合も同様,「どの軸回りにも回転していない止まった状態」を表現するのに零ベクトル
を使うのに,なぜworldAngularVelocityには(0,0,0)という零ベクトルを設定することができないのだろう?
という疑問です.

何らかの理由で零ベクトルを受け付けないとしても,回転運動しているオブジェクトを止まった状態にしたい場面
は多いだろうと思うので,
「別の関数で用意されているのか?」や「なぜ零ベクトルを受け付けなくなっているのか?」
と考え,前回ご返答させていただきました.

不十分な説明で余計なお時間をとらせてしまい申し訳ありませんでした.
今後は楽をせず,まずはソースやBulletのマニュアルを読んで自己解決できるように頑張ります.
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2013/6/26 10:11
完全無欠猫  長老 居住地: 兵庫  投稿数: 750
>worldLinearVelocityの場合,(0,0,0)という零ベクトルを設定することで「止まった状態」を実現できます.
速度ベクトル零は数学にうとくても動かないので停止することは容易に想像できます。
しかし角速度零の場合は少し違います。
この時速度ベクトルも零であれば停止とは思えます。
しかし速度ベクトルになんらかの値を持っている場合に角速度が零と言われたら・・・
停止するためにはそれまでに維持していた方向性を常に打ち消しあわないと停止できないのではないかと思えました。
この時打ち消しあうためには角速度が変化し続ける必要性があると思えました。
そういう意味で一意ではなくなり定まらないのではないかと思った次第です。

実際に引き起こされる運動量は速度ベクトルで運動量の消費される方向性が角速度だと思っています。
角速度は変化量なので反作用の力がない状態で角速度が零になる必須条件は速度ベクトルが零であるべきだと思いました。
すいません抽象的な書き方で・・。
速度ベクトル零で角速度に何らかの値を持っている場合は方向性を維持したまま停止・・・。
しかし角速度零で速度ベクトルに何らかの値を持っている場合は想像できませんでした。
進行を妨げるものでもあれば簡単に想像できましたが・・・。

投票数:10 平均点:4.00

  条件検索へ


ログイン

ユーザ名:

パスワード:



パスワード紛失

クイックリンク

2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)

●ニュース(英文)
BlenderNation

●Blenderコミュニティ
blenderartists.org

●Blender Q&A
- Blender Stack Exchange

●テストビルド
Buildbot(自動生成)


●開発関連
公式開発サイト
Blender開発blog
Blender Wiki