Model 如何计算旋转后附着的模型的位置[XNA]?
我正在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
//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对象所连接的实体的位置-在您的情况下,该实体可能就是玩家。