Babylon.js で物理演算(havok):RigidVehicleをつくってみたけど..
この記事のスナップショット

083_car3_rigidCar .. RigidCar
(コードを見たい人はURLから full.html を消したURLを指定してください)
ソース
- 083_car1_wheel .. ホイール(テスト)
- 083_car2_draft .. RigidCar(テスト)
- 083_car3_rigidCar .. RigidCar
ローカルで動かす場合、./js 以下のライブラリは 069/js を利用してください。
概要
物理エンジンhavok上で、Physics6DoFConstraint を使ってホイールをつくり、サスペンションのない車を作ってみました。
結果、それっぽくはなったけどイマイチな車ができあがりました。
やったこと
- ホイールをつくる
- 車モデルをつくる
ホイールをつくる
Motor Constraintsを見て、「車のホイール」を作れるかなと試行錯誤。2つの Physics6DoFConstraint を使えばできそうだとわかりました。1つ目はホイールの回転に、2つ目は舵角を制御するのに使います。
ホイールのメッシュを円柱で作っているため中心軸がY軸(縦向き)になってます。90度回転させた状態で使いたいのですが、回転させているためか、ホイールを立てて動かすことがうまくいかず失敗。毎回、ホイールが倒れた状態で動きます。
車輪の回転軸に対し、傾斜角(舵角)がずれている版(4倍速)

結果、TransformNode を親に、90度回転させた円柱を子としたメッシュを用意して回避しました。(接続する座標や軸で解決できそうな気がしますが、うまくいかず...)
不格好ですが一応ホイールができました。
左:車輪の回転軸に対し、傾斜角が正しい版(自動で回転)と
右:車輪の回転軸に対し、傾斜角・回転を操作の版(wsadで操作)(4倍速)

083_car1_wheel .. ホイール(テスト)
余談
当初質量(mass)を軽めにつくってましたが、ホイールを傾けるとグラグラします。回転していると特にブレます。原因がわからずに質量を増やすと安定した動きになりました。よくわらないけど、そういうもんなんでしょう。
グラグラするホイール(質量が軽いとき)(4倍速)

083_car3_draft .. RigidCar(テスト)
車モデルをつくる
ホイール(駆動系)がなんとかできたので、車としての体裁を整えるため下記をつくりこみます。
- キー入力操作
- 加速・減速
- ハンドル/舵角操作
- 姿勢のリセット(横転、スピン対応)

083_car3_rigidCar .. RigidCar
いざ、うごかしてみると...
- 開始時にスピン状態。部品の座標が正しくない・ズレているためと思われる
- たまにホイールが地面にめり込んで、ぬけだせなくなる
- 何かの拍子に、地面(平面)を突き抜けてしまった?
- 駆動系を FR にすると、前輪がロック状態(舵角はうごく)
- スピードを出すと車体がブレる/ボディが傾く/不安定(サスが無いので仕方ない)。
重力を大きくすれば安定するかも?
直進させた場合(4倍速)

まとめ・雑感
cannon.js にある RigidVehicleモデルと同じような機構なので、ある程度の使いにくさは想定してましたが、それ以上の残念さ。フォーラムに車のサンプルがありますが、使い方が「さっぱりわからん」なので、自作にチャレンジしたわけですが。これならhovokをあきらめて、cannon や ammo の車モデルを使った方が良いかも?
このまま断念するには気がかりが多い。機を見て再チャレです。
Discussion