前回まででBox2Dの基本的な部分は出来たけど、今回はより掘り下げて、オブジェクトの3つの基本的なプロパティ「friction」「restitution」「density」について調べてみた。
まずはfriction。
まずはfriction。
b2ShapeDefのソースを覗くと「The shape's friction coefficient, usually in the range [0,1].」とあるから「摩擦係数」のことで「0〜1の値」で指定するのが普通らしい。
昔習った様な気がするけどもう完全に忘れてる、、
調べてみるとどうやら、2つの物体間の摩擦力を決める係数みたい。
でさらに「静摩擦係数」「動摩擦係数」という2種類があって、「静摩擦係数」は静止している物体同士の間に発生する摩擦力(静止摩擦力)に対する係数で、「動摩擦係数」はどちらか(または両方)の物体が動いている際に発生する摩擦力(動摩擦力)に対する係数だそうだ。
そして2つの物体の材質によっても変化し(木、氷、鉄など)、また物体が濡れているか乾燥しているかによっても変わってくる。
ということは、衝突判定に、局所毎にfrictionを変化させる処理を入れなきゃいけないのか、、
そんなことをするとFlash側の処理も大変になるだろうし、なにより自分が大変だ。
という事で、材質毎に平均値で決めてしまうのが良いかなと思った。
↓平均値を求めるにはここのページが参考になるかな。
・Coefficients Of Friction
めんどかったから大体の値(と自分の中での思い込みも混ぜた)で、、
「鉄:0.6、アルミニウム:0.6、ゴム:0.9、木:0.5、コンクリート:0.7、氷:0」
ん〜物理、、
次はrestitution。
ソースには「The shape's restitution (elasticity) usually in the range [0,1].」とあるから、弾力(弾性)のこと。
これは調べてもなかなか思ったものが無かったからfrictionと同様に「0〜1の値」で勝手に決めてみた。
「鉄:0.2、アルミニウム:0.3、ゴム:0.9、木:0.3、コンクリート:0.1、氷:0.1」
こんなもんか
最後にdensity。
ソースでは「The shape's density, usually in kg/m^2.」とある。
密度のことらしいけど立法メートルではなく平方メートルになっている。これは「面積密度」と言うみたい。
1m^2当たりの物体の質量を入れる。(オブジェクトの重さは、大きさ×densityになってるっぽい)
ということで、↓このあたりを参考にさせていただくと、
・数量の比較 (密度)
・MSN 相談箱 | 天然ゴムの密度は?
・木ってどうなっているの?
「鉄:7.9、アルミニウム:2.6、ゴム:0.4、木:1.4、コンクリート:2.4、氷:1」
だろうかね。
で、これを自作クラスに反映させてみたら、ボディーが重すぎて沈んだ。。
↓クラスはこんな感じで設定した。 色々さぐったら、restitutionがJointにも影響してるみたいで、車のボディとタイヤを繋ぐJointに、タイヤのrestitutionが思い切り反映されてしまっていて、クタるみたい。
解決策として、タイヤの中心にアルミのオブジェクトを追加した。まだちょっとクタるけど、まぁ動くから良いか。。
・ソース(結構Classをいじってしまった)
まだまだだな、、
昔習った様な気がするけどもう完全に忘れてる、、
調べてみるとどうやら、2つの物体間の摩擦力を決める係数みたい。
でさらに「静摩擦係数」「動摩擦係数」という2種類があって、「静摩擦係数」は静止している物体同士の間に発生する摩擦力(静止摩擦力)に対する係数で、「動摩擦係数」はどちらか(または両方)の物体が動いている際に発生する摩擦力(動摩擦力)に対する係数だそうだ。
そして2つの物体の材質によっても変化し(木、氷、鉄など)、また物体が濡れているか乾燥しているかによっても変わってくる。
ということは、衝突判定に、局所毎にfrictionを変化させる処理を入れなきゃいけないのか、、
そんなことをするとFlash側の処理も大変になるだろうし、なにより自分が大変だ。
という事で、材質毎に平均値で決めてしまうのが良いかなと思った。
↓平均値を求めるにはここのページが参考になるかな。
・Coefficients Of Friction
めんどかったから大体の値(と自分の中での思い込みも混ぜた)で、、
「鉄:0.6、アルミニウム:0.6、ゴム:0.9、木:0.5、コンクリート:0.7、氷:0」
ん〜物理、、
次はrestitution。
ソースには「The shape's restitution (elasticity) usually in the range [0,1].」とあるから、弾力(弾性)のこと。
これは調べてもなかなか思ったものが無かったからfrictionと同様に「0〜1の値」で勝手に決めてみた。
「鉄:0.2、アルミニウム:0.3、ゴム:0.9、木:0.3、コンクリート:0.1、氷:0.1」
こんなもんか
最後にdensity。
ソースでは「The shape's density, usually in kg/m^2.」とある。
密度のことらしいけど立法メートルではなく平方メートルになっている。これは「面積密度」と言うみたい。
1m^2当たりの物体の質量を入れる。(オブジェクトの重さは、大きさ×densityになってるっぽい)
ということで、↓このあたりを参考にさせていただくと、
・数量の比較 (密度)
・MSN 相談箱 | 天然ゴムの密度は?
・木ってどうなっているの?
「鉄:7.9、アルミニウム:2.6、ゴム:0.4、木:1.4、コンクリート:2.4、氷:1」
だろうかね。
で、これを自作クラスに反映させてみたら、ボディーが重すぎて沈んだ。。
↓クラスはこんな感じで設定した。 色々さぐったら、restitutionがJointにも影響してるみたいで、車のボディとタイヤを繋ぐJointに、タイヤのrestitutionが思い切り反映されてしまっていて、クタるみたい。
解決策として、タイヤの中心にアルミのオブジェクトを追加した。まだちょっとクタるけど、まぁ動くから良いか。。
・ソース(結構Classをいじってしまった)
まだまだだな、、

BODY部分の
