gpt4 book ai didi

c# - 第一人称武器

转载 作者:行者123 更新时间:2023-11-30 20:00:15 25 4
gpt4 key购买 nike

我和我的团队已经尝试在屏幕上显示我们的武器一周了,但没有成功:我们真的需要这方面的帮助。我们想要得到的是,就像在每个 FPS 中一样,武器显示在屏幕上有一点水平偏移,就好像玩家拿着它一样。

我们已经尝试过使用矩阵,但没有成功:武器甚至不可见,它似乎在我们身后,即使我们尝试稍微调整一下这些值,我们也无法让它发挥作用

我们知道我们需要使用相机的旋转,以及它的位置,但是我们无法计算出获取武器世界矩阵的公式。

我们所拥有的是,相机的位置作为 Vector3,相机的旋转也作为 Vector3,其中 y 坐标是水平旋转,介于 pi 和 -pi 之间,x 是垂直旋转。武器缩放为 0.1f。我们该怎么办?

非常感谢您的帮助。

编辑:这是与我的问题相关的一些代码:

public void Update()
{
weapon.Rotation = ThisPlayer.Rotation;

weapon.WorldMatrix = WeaponWorldMatrix(
ThisPlayer.Position,
ThisPlayer.Rotation.Y,
ThisPlayer.Rotation.X
);

}

private Matrix WeaponWorldMatrix(Vector3 Position, float updown, float leftright)
{
Vector3 xAxis;
Vector3 yAxis;

xAxis.X = SceneManager.Game.Camera.View.M11;
xAxis.Y = SceneManager.Game.Camera.View.M21;
xAxis.Z = SceneManager.Game.Camera.View.M31;

yAxis.X = SceneManager.Game.Camera.View.M12;
yAxis.Y = SceneManager.Game.Camera.View.M22;
yAxis.Z = SceneManager.Game.Camera.View.M32;

Position += new Vector3(1, 0, 0) / 5; //How far infront of the camera The gun will be
Position += xAxis * 1f; //X axis offset
Position += -yAxis * 0.5f; //Y axis offset
SceneManager.Game.DebugScreen.Debug(Position.ToString());
return Matrix.CreateScale(0.1f) //Size of the Gun
* Matrix.CreateFromYawPitchRoll(MathHelper.ToRadians(5), 0, 0) //Rotation offset
* Matrix.CreateRotationX(updown)
* Matrix.CreateRotationY(leftright)
* Matrix.CreateTranslation(Position);
}

最佳答案

最简单的方法是反转相机的 View 矩阵,然后可以使用它来表示相机的世界空间位置和旋转。这个结果可以被借用并稍作改变,成为武器的世界矩阵。

Matrix cameraWorld = Matrix.Invert(view);

Matrix weaponWorld = cameraWorld; //gives your weapon a matrix that is co-located and co-rotated with camera


//then simply reposition the weapon matrix as necessary
weaponWorld.Translation += (cameraWorld.Forward * distInFrontOfCam) + //set to taste. moves the weapon slightly in front of cam
(cameraWorld.Down * amountWeaponIsLoweredFromCenterOfScreen) + //set to taste. moves the weapon from the center of the screen to the lower part
(cameraWorld.Right * leftOrRightOffset); //set to taste. moves the weapon left or right of center if desired.

编辑。我注意到你也在尝试将比例应用到你的武器上。我的建议是不要在代码中这样做。而是在解决方案资源管理器中右键单击武器模型并选择属性。在属性窗口中,单击“内容处理器”旁边的小箭头以展开列表。找到比例属性并在那里设置比例(到你的 0.1f 或其他)。现在您再也不需要浪费 CPU 周期来在代码中扩展该模型。这会导致在将 fbx 转换为 xnb 时在构建阶段设置比例。

关于c# - 第一人称武器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21839680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com