2017-11-01 9 views
0

私は次のキーを使用して回転させる能力でセットアップをした次のシーンhttps://rawgit.com/bicarbon8/SpaceSim/MomentumProblem/babylon.html持っている: どのようにして、mesh.locallyベクトル3モーションをワールド空間モーションに変換して、オブジェクトに勢いを与えることができますか?

  • を左

    • I =ピッチダウン
    • のk =ピッチアップ
    • J =ロールをL =ロールが右
    • uが=ヨー
    • O =ヨーを左右
    • /=すべての回転をキャンセル

    と次のキーで移動する:

    • Q = =は機銃掃射後方
    • のS =左機銃掃射
    • Fを移動させる=前方
    • 移動右
    • E =上へ移動
    • d =下へ移動
    • \すべての移動をキャンセル

    メッシュを指し示す方向に動かすのにうまくいきますが、メッシュの回転に基づいて動作を開始したいと思いますが、それに関係なく元の方向に動き続けますモーションが開始された後に起こるメッシュへの回転の変化(運動量を維持する)。

    x、y、zの値を持つ別々のオブジェクトを使って各方向の動きをトラッキングするので、動きのあるキーボードを押すたびにこのオブジェクトが変更され、アニメーションサイクルが、私が使用している理由:

    mesh.locallyTranslate(新しいBABYLON.Vector3(X、Y、Z))

    メッシュを回転させたときに動きがメッシュで回転します。どのようにして、メッシュの回転の方向性を、ワールドベースの翻訳で使用できるVector3に変換できますか?

    注:これは微小重力/無重力環境で任意の助けを事前に

    おかげな動きをシミュレートする必要があります。

  • 答えて

    1

    は、UnityエンジンとThree.jsソリューションの組み合わせによって、同様のタイプの問題を解決し、Babylon.js githubページを精査した後、独自に解決策を見つけることができました。これを修正するには、ワールド・トラッキング・ベロシティ・オブジェクトをキー入力に基づく直接入力から、メッシュのワールド・マトリックスに基づく計算されたBABYLON.Vector3に変更しなければならず、ローカル・スペース方向の正規化ベクトル3その後、モメンタムを追跡するために使用される既存のグローバルVector3に追加されます(その後ワールド空間翻訳を使用してメッシュに適用されます)。

    オリジナル:

    固定
    var direction = new BABYLON.Vector3.Zero(); // global 
    ... 
    // on keypress of 'q' key apply thrust along 'z' axis 
    if (map["q"]) { // forward thrust 
        direction.z += 0.001; 
    }; 
    ... 
    // apply translation to mesh 
    mesh.locallyTranslate(new BABYLON.Vector3(x, y, z)); 
    

    var velocity = new BABYLON.Vector3.Zero(); // global 
    ... 
    // on keypress of 'q' key apply thrust along 'z' axis using mesh world matrix to convert to world space vector 
    if (map["q"]) { // forward thrust 
        var matrix = mesh.getWorldMatrix(); 
        var vector = new BABYLON.Vector3.Zero(); 
        vector = BABYLON.Vector3.TransformNormal(new BABYLON.Vector3(0, 0, 1), matrix); 
        velocity.addInPlace(vector); 
    }; 
    ... 
    // apply translation to mesh 
    mesh.translate(velocity, 0.001, BABYLON.Space.WORLD); 
    

    今「速度」オブジェクトは勢いを維持し、オブジェクトがその「に基づいて、速度」オブジェクトに追加の変更を回転させ、適用して自由です回転と推力の方向。

    例コード:https://rawgit.com/bicarbon8/SpaceSim/FixTranslationMomentum/babylon.html

    関連する問題