LoginSignup
2
3

More than 3 years have passed since last update.

物理エンジン cannon.js の使い方(コードの書き方)で悩んでます。どなたか、お助けくださいませ。(->解決しました)

Last updated at Posted at 2019-07-30

どなたか、お助けください。👉解決しました!!お騒がせしました。ありがとうございました。

物理エンジン Cannon.js

物理エンジン Cannon.js でゲームを作ってみたくて、コードを書いているのですが、
addShape()の動作がわたしの解釈と異なるのです。うまくいかない。うーむ。

body.addShape() の第三引数は Quaternion() じゃないの??

ここに body.addShape() のドキュメントがあるのですが。第三引数は Quaternion って書いてますよねー。
https://schteppe.github.io/cannon.js/docs/classes/Body.html

image.png

問題のソースコードと実行結果は CodePen で。

ここのコードでは、棒状の Box に立方体や球を追加して、アイスキャンディーのような形をいろいろ作りたいのです。
コードでは、3 x 4 = 12 種類の物体を作っているつもりですが、
左の3つは期待通りですが、それ以外は、、、伸びてます。食い込んでいます。で、めっちゃ跳ねています。
image.png
なぜ??ちょっと傾けて登録したくて角度を指定しただけなのに、、、

See the Pen Cannon.js addShape() test by yamazaki.3104 (@yamazaki3104) on CodePen.

悩んでいるは CANNON.Quaternion() の角度指定

new CANNON.Quaternion()の角度指定、、、0なら希望通りに動くが、それ以外の角度だと、、、、伸びてます。食い込みます。めっちゃ跳ねています。

呼び側は、位置と角度を変えているだけなんです。

add_shape_quaternion( { x:-15, y: 10, z:-10 }, { x:0, y:1, z:0, w: Math.PI/8 * 0 } )
add_shape_quaternion( { x: -5, y: 10, z:-10 }, { x:0, y:1, z:0, w: Math.PI/8 * 1 } )
add_shape_quaternion( { x:  5, y: 10, z:-10 }, { x:0, y:1, z:0, w: Math.PI/8 * 2 } )
add_shape_quaternion( { x: 15, y: 10, z:-10 }, { x:0, y:1, z:0, w: Math.PI/8 * 3 } )

ちなみに、Quaternionの座標軸を変えても、同様の現象が発生します。

    test_cylinder.addShape(
        new CANNON.Cylinder( 1.9, 1.2, 1.0, 5 ), // radiusTop  radiusBottom  height  numSegments
        new CANNON.Vec3( 0, 0, -0.5 ),
        new CANNON.Quaternion( _q.x, _q.y, _q.z, _q.w ) // ★最終的にはこの角度指定 _q.w
    )

どなたか、迷えるおっさんに愛の手を、、、間違いをご指摘くださいませー。

よろしくお願いいたします。

追記: 解決しました

おかげさまで、解決できました。

問題の原因は、Quaternionの引数を勘違いでした。

    // コンストラクタの引数はこういう使い方ではない
    new CANNON.Quaternion( _q.x, _q.y, _q.z, _q.w )

    // こうすればおっけー
    let qut = new CANNON.Quaternion()
    qut.setFromAxisAngle( new CANNON.Vec3( _q.x, _q.y, _q.z ), _q.w )

Quaternionの生成後に setFromAxisAngle() することで、うまくいきました。

See the Pen Cannon.js addShape NG -> OK by yamazaki.3104 (@yamazaki3104) on CodePen.

ありがとうございました。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3