Model 如何计算旋转后附着的模型的位置[XNA]?

Model 如何计算旋转后附着的模型的位置[XNA]?,model,xna,rotation,position,game-engine,Model,Xna,Rotation,Position,Game Engine,我正在xna上编写一个基本游戏。我开始把一个物体(如武器)固定在我的球员的右臂上。当我把我的角色向前移动到左后或右后时。但当我旋转时,我的设备没有正确定位。 我完全理解有必要根据已完成的轮换重新计算新位置,但我不知道如何计算。 这是我的代码和图片 万分感谢 //Function that will draw the current item selection in the player's hand private void draw_itemActio

我正在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基于,附着对象的变换为:

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);
变量名是不言自明的。

基于此,附加对象的转换为:

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);

变量名是不言自明的。

我必须从枪的位置获得旋转。然后你为你的相机创建一个新的位置和旋转。你可以从中找到一个非常精确和好的答案。样本代码随附。如果项目要求您在运行之前注册到XBOX,您可以删除XBOX项目并保留windows项目

你必须从你的枪和它的位置得到旋转。然后你为你的相机创建一个新的位置和旋转。你可以从中找到一个非常精确和好的答案。样本代码随附。如果项目要求您在运行之前注册到XBOX,您可以删除XBOX项目并保留windows项目

你看到这个了吗?谢谢!!你能写下这个作为答案吗?你看到这个了吗?谢谢!!你能写下这个作为答案吗?只是一个问题!“ParentPosition”等于玩家的位置或对象?@MehdiBugnard您的对象所连接的实体的位置-在您的情况下,该实体可能就是玩家。这是一个问题!“ParentPosition”等于玩家的位置或对象?@MehdiBugnard对象所连接的实体的位置-在您的情况下,该实体可能就是玩家。