Esempio n. 1
0
        private void _ジョイントを作成する(List <PMXFormat.ジョイント> ジョイントリスト)
        {
            foreach (var jointData in ジョイントリスト)
            {
                switch (jointData.種別)
                {
                case PMXFormat.ジョイント種別.P2P:
                case PMXFormat.ジョイント種別.スライダー:
                case PMXFormat.ジョイント種別.ヒンジ:
                case PMXFormat.ジョイント種別.円錐回転:
                case PMXFormat.ジョイント種別.基本6DOF:
                    break;      // TODO: ばね付き6DOF以外のジョイントへの対応

                case PMXFormat.ジョイント種別.ばね付き6DOF:
                {
                    var jointParam = (PMXFormat.ばね付き6DOFジョイントパラメータ)jointData.パラメータ;

                    // 六軸ジョイントに繋がる剛体のペアを作成する。

                    var bodyA          = this._Bulletの剛体リスト[jointParam.関連剛体Aのインデックス];
                    var bodyAworld_inv = Matrix.Invert(this._Bullet管理.物理演算結果のワールド行列を取得する(bodyA));

                    var bodyB          = this._Bulletの剛体リスト[jointParam.関連剛体Bのインデックス];
                    var bodyBworld_inv = Matrix.Invert(this._Bullet管理.物理演算結果のワールド行列を取得する(bodyB));

                    var jointRotation = jointParam.回転rad;
                    var jointPosition = jointParam.位置;

                    var jointWorld = Matrix.RotationYawPitchRoll(jointRotation.Y, jointRotation.X, jointRotation.Z) * Matrix.Translation(jointPosition.X, jointPosition.Y, jointPosition.Z);

                    var connectedBodyA = new 六軸ジョイントにつながる剛体(bodyA, jointWorld * bodyAworld_inv);
                    var connectedBodyB = new 六軸ジョイントにつながる剛体(bodyB, jointWorld * bodyBworld_inv);

                    var つなぐ剛体のペア = new 六軸ジョイントにつながる剛体のペア(connectedBodyA, connectedBodyB);

                    // 六軸可動制限を作成する。

                    var movementRestriction = new 六軸ジョイントの移動制限(jointParam.移動制限の下限, jointParam.移動制限の上限);
                    var rotationRestriction = new 六軸ジョイントの回転制限(jointParam.回転制限の下限rad, jointParam.回転制限の上限rad);
                    var 六軸可動制限 = new 六軸可動制限(movementRestriction, rotationRestriction);


                    // 六軸バネを作成する。

                    var 六軸バネ = new 六軸バネ剛性(jointParam.バネ移動定数, jointParam.バネ回転定数);


                    this._Bullet管理.剛体と剛体の間に6軸バネ拘束を追加する(つなぐ剛体のペア, 六軸可動制限, 六軸バネ);
                }
                break;
                }
            }
        }
 public 六軸可動制限(六軸ジョイントの移動制限 移動制限, 六軸ジョイントの回転制限 回転制限)
 {
     this.移動制限 = 移動制限;
     this.回転制限 = 回転制限;
 }