2016年7月12日火曜日

blender car PhysicsConstraints



羽鼠混糞投記
blender car

Using a Model of Car in the Game Engine (Bullet Physics Vehicle Simulation)




上のサイトをみて動画を解析する。

6/9
Select All by Type...:指定タイプの可視オブジェクトを選択
Object">"Clear/Apply">"Apply Scale/Rotation to ObData" を行うと確かに、回転とスケール情報がリセットされるようです

ボディ「をz方向に3上に移動

タイヤを全部矩形選択して z方向に-1移動

そしてその間に平面 床?を作成 わけがわからん。
スケールで100倍にする。
2:23秒

game logic に切り替え
blender game に切り替え
num5

プロパテェ → physics で

cube(car本体) を選択
rigid body no sleepingにチェック
 https://wiki.blender.org/index.php/Doc:JA/2.6/Manual/Game_Engine/Physics/Object_Type/Dynamic
No Sleeping   デフォルトでは、回転の物理計算の適用されているオブジェクトの動きが止まると、回転物理は無効にされます。そのオブジェクトの動きを計算する必要はなく なったと物理エンジンが判断するためです。これはある場合には正しく、またコンピュータの処理能力を節約することになります。しかし別の場合、たとえば サッカーゲームなどでは、誰かがボールをまた蹴って動かすまで物理計算を維持する必要があります。 
collision bounds にチェック bounds:横選択してconvex hull にする。
http://qcganime.web.fc2.com/BLENDER/RigidBody02.html
さ て、その下にある、Rigid Body Collisions が衝突判定の形状の設定です。デフォルトはCovex Hullになっていますが、これは凹部分を考慮しないで衝突判定をするということになっています。   床が凹んでいる状態で、床の衝突判定をCovex Hullにすると、実際の床より上で衝突判定が起きてしまいます。これはいかんです

ThreFDを選択
     プロパテェ → physicsタブ → Physics → Physics Type → プルアップメ
    ニュー → No Collison
    他のタイヤも同様にする。 

エディタウィンドウ → Text → open text block → CarSetup.pyを開く





上をする前にスクリプトウィンドウのtextのプルアップメニューでmake ...
を実行しているがこれは2.62の仕様みたい。私の2.63ではこのコマンドがな
い。

3:36秒
ここまで getStTut1_a2.blend で保存
上ファイル編集
    def Tire_Positions と def Tire_Radius() の部分を編集
    元から編集したファイルを配布したらいいと思うのだがそ
    れではつくる喜びがないか。

5:11 これよりロジック部分の編集
cub選択
alwaysセンサー追加
ロジック真ん中部分のコントローラはpythonを追加
    さらにスクリプトとして CarSetup.pyを追加
    二つを「ひも」でむすんで、プロパティ→レンダータブ→
    Embedded PlayerのStartボタンを押す。
    すると レンダーされて尚かつ床にクッションをきかせなが
    ら着地するのに私のものではクッションなし。しかもタイヤ
    が見えない。??????
    単純ミス、「ひも」で結んでなかった。
    ●●何でスクリプトでクッションがきいたか検討

5:32秒多分上の画面が暗いので何とかするのだろう
Lamp選択
    プロパティ→ObjectData→Energyを5にする。
    多分光源のエネルギーアップ。
    そして多分適当にランプを少し上に。

5:50秒新しいスクリプトをどうかするのかな
    でその前に今のやつを当然保存していると思う。
    PowerTrain.py の読み込み。
    getStTut1_a2.blendで保存
    やっている事は単純だが、英語で理解するとなると大変

ロジックエディタ
cubeを選択
    新しいセンサー追加 Keyboard 名前をGasに変更
        key: の右側をUp Arrow とする。(↑keyをおせばよ~い)
    コントローラ追加 pythonを選択 ファイル名はPowertrain.py
    で2つを「ひも」で結ぶ。

    以下 同じようにセンサーを追加、名前を変更 コントローラの2番目
    に接続
      名前           押すキー
      Reverse    Down Arrow
      Left       Left Arrow
      Right     Right Arrow

7:22秒 getStTut1_a3.blendにて保存
    さらにkeyboradのセンサーを2つ追加
    Breake       Spacebar
    EBreake      e
    同ファイルにて保存

このYou Tubeの時間、何か前回開いた時と時間のカウントがずれているような気がする
レンダーのスタートボタンを押す。するとアクセルが利きすぎるのか車が空中へすっと
んでいく。やり直すと、今度はタイヤだけは回転するが車は停止したまま。?
getStTut7.blendでは動画と同じ動きをする。当たり前。このファイルは完成品だか
ら。まちがいさがしか。
簡単。前回のセンサーやスクリプトが有効のままだった。

これを修正したら、タイヤが消滅してしまった。
完成ファイルでみると、タイヤは床の下にかくれていた。私の作成したファイルでも同
様にあったがなんでこんな奇妙なやり方で、しかも私のほうはタイヤが実行するとき
表示されないのか。

いや、前回のセンサー スクリプトは有効のままだった。
cubeの物理演算タブのNo Sleepingにチェックをいれたつもりが入っていなかった。
Massが正規は200らしい。変更する。
今のところ、これで正常に動作しているようだ。
getStTut1_a4.blendにて保存。


E:\OneDrive\myprg_main\blender\allFiles_kaiseki\getStTut7.blender
にてスクリプト、タイヤがへんな場所(床のした)にあることの理由ど解析してみる。

CarSetup.pyにて、タイヤのサスペンションなどいろいろ設定してある。
コードに日本語を書くとblenderがうけつけないので、コード解析をしたものを
CarSetup解説.py で書いた。以下それの参考サイト
googleのヒット数(日本語)が少なかったので貴重だ。
私のブログにまるごと保存、非公開なら良いだろう。
// http://code.tiblab.net/bge/physics_vehicle
車の実装
// https://heikin.wordpress.com/2014/01/12/vehicle-constraint%E3%82%92%E4%BD%BF%E3%81%86/
Vehicle Constraintを使う
次は別のスクリプトに挑戦
[2016-07-11]


[2016-07-12]
E:\OneDrive\myprg_main\blender\allFiles_kaiseki\Powertrain解説.py
上のファイルにコードの解析を書いた。
あとはcubeとか車輪とかの作成の仕方だ。なんで車輪が床の下にあるのか。
なんで車輪が車本体と「同時」に動くのか

CarSetup.pyだけを殺すと車輪が床の下の位置のままでサスペンションもなにもない
PowerTrain.pyだけを殺すと同様になる。

結論 PhysicsConstraints をつかえば、blender本体でオブジェクトを作成しただけ
で、車(4輪)の動作ができるようになる。

CarSetup.pyで車輪のポジションを変えて見た。このポジションは多分車体かどこかか
らの相対座標であると思う。この設定で車輪1をz=0.8 車輪4 をz=-2.4にしてみた。





0 件のコメント:

コメントを投稿

About

参加ユーザー

連絡フォーム

名前

メール *

メッセージ *

ページ

Featured Posts