1

私はxnaで基本的なゲームをプログラミングしています。プレーヤーの右腕にオブジェクト(武器など)を取り付け始めました。キャラクターを左後ろまたは右後ろに動かすと、すべて右になります。しかし、回転させると、機器が正しく配置されません。行った回転に基づいて新しい位置を再計算する必要があることは十分に理解していますが、その方法がわかりません。これが私のコードと写真です千ありがとう

        //Function that will draw the current item selection in the player's hand            
private void draw_itemActionInUse(Model modelInUse)
            {

                int handIndex = skinningData.BoneIndices["Hand_Right"];

                Matrix[] worldTransforms = animationPlayer.GetWorldTransforms();

                Matrix rotationMatrixCalcul = Matrix.CreateRotationY(player.Rotation.Y);
//Here I calculate the new position of the item, but it does not work
                Vector3 newPosition= Vector3.Transform(new Vector3(player.Position.X, player.Position.Y + 4, player.Position.Z ), rotationMatrixCalcul);
                foreach (ModelMesh mesh in modelInUse.Meshes)
                {
                    foreach (BasicEffect effect in mesh.Effects)
                    {

                        effect.World =
    worldTransforms[handIndex]
    *
    Matrix.CreateScale(2)
    *
    Matrix.CreateRotationY(player.Rotation.Y)
    *
    Matrix.CreateTranslation(newPosition);

                        effect.View = View_;
                        effect.Projection = Projection_;

                        effect.EnableDefaultLighting();
                    }

                    mesh.Draw();
                }

            }

初期位置

図A:位置:x:0; y:0; z:0角度:90 図B:位置:x:2; y:4; z:0角度:90 ここに画像の説明を入力してください 図A:位置:x:1; y:0 ; z:1角度:35 図B:位置:この位置をどのように計算しますか? 角度:35

4

2 に答える 2

1

このstackoverflow answerに基づいて、添付されたオブジェクトの変換は次のとおりです。

Matrix positionRotationMatrix = Matrix.CreateTranslation(-parentPosition) 
                               * Matrix.CreateFromQuaternion(parentRotation) 
                               * Matrix.CreateTranslation(parentPosition);
Vector3 translation = Vector3.Transform(parentPosition + relativePosition,
                               positionRotationMatrix);

Matrix worldMatrix = Matrix.CreateScale(scale)
                * Matrix.CreateFromQuaternion(rotation)
                * Matrix.CreateFromQuaternion(parentRotation)
                * Matrix.CreateTranslation(translation);

変数名は一目瞭然です。

于 2012-12-30T14:17:07.910 に答える
0

銃とその位置から回転を取得する必要があります。次に、カメラの新しい位置と回転を作成します。 http://msdn.microsoft.com/en-us/library/bb203909%28v=xnagamestudio.31%29.aspxから非常に正確で適切な答えを見つけることができます。サンプルコードを添付します。プロジェクトを実行する前に XBOX に登録するように求められた場合は、Xbox プロジェクトを削除して Windows プロジェクトを保持するだけです。

于 2014-05-21T07:26:58.103 に答える