gpt4 book ai didi

XNA - 使用具有旋转/缩放/平移功能的 2d 相机系统获取鼠标坐标

转载 作者:行者123 更新时间:2023-12-02 04:02:32 30 4
gpt4 key购买 nike

我有一个带有此平移矩阵的 2d 相机:

        Transform = Matrix.CreateTranslation(new Vector3(-Position.X, -Position.Y, 0)) *
Matrix.CreateRotationZ(Rotation) *
Matrix.CreateScale(new Vector3(Scale, Scale, 0)) *
Matrix.CreateTranslation(new Vector3((GraphicsDevice.Viewport.Width * 0.5f), (GraphicsDevice.Viewport.Height * 0.5f), 0));

适用于旋转/缩放,其中原点是相机的中心。

现在我正在尝试获取鼠标在世界上的坐标。

我尝试只使用逆变换,但这只会导致 NaN 错误。我猜我需要为鼠标坐标设置另一个平移矩阵,与当前的相反,但我不知道这是如何设置的

我有这个,

MousePosition = new Vector2((Mouse.GetState().X - DrawTransform.Translation.X) * (1/Gamecode.Camera1.Scale), (Mouse.GetState().Y - DrawTransform.Translation.Y) * (1/Gamecode.Camera1.Scale));

但这没有考虑轮换

最佳答案

通常,找到矩阵的逆比手动计算客户端到世界的位置更容易、更可靠。

矩阵的问题 - 无法获得逆矩阵的原因是您将 Z 轴缩小到零。

Matrix.CreateScale(new Vector3(Scale, Scale, 0))

这意味着您已将整个空间展平在一个轴上。因此,当您尝试在该空间(客户端空间)中获取单个点并将其返回到原始空间(世界空间)时,您得到的实际上是一条沿 Z 轴延伸的线。这就是为什么你会得到 NaN。 (或者你可以直接说 - 你引入了除以零的方法。)

矩阵逆函数不知道您只是使用平坦的二维平面。 XNA 的矩阵是 3D。

解决方法是将矩阵更改为:

Matrix.CreateScale(Scale)

然后尝试求逆。

关于XNA - 使用具有旋转/缩放/平移功能的 2d 相机系统获取鼠标坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3689571/

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