xna使对象围绕其轴移动(而不是围绕点0,0,0)

本文关键字:移动 对象 xna | 更新日期: 2023-09-27 17:50:29

如何使对象绕其轴旋转?也就是说,让月球围绕点0,0,0和它自己的轴旋转?到目前为止,我只能通过使用gametime组件和创建旋转矩阵来处理点0,0,0。

xna使对象围绕其轴移动(而不是围绕点0,0,0)

将对象的中心转置为(0,0,0),进行旋转,然后转置回来

假设我们有以下内容:

class 2DMoon
{
    Texture2D texture;
    Vector2 axis;
    Vector2 origin;
}

原点可以是(0,0),但我们假设它是更复杂的东西——比如(29,43)。现在让我们假设纹理的宽度为50,高度为90。

要获得纹理的轴以使其旋转,假设您想要中心,您将执行以下操作(假设原点(即。当前位置)和纹理被加载):

轴。X =(。5 * texture.Width);轴。Y =(。

如你所知,这将使轴成为向量(25,45)

正如BlueRaja上面所说的,你可以创建一个像这样的方法:

Rotate()
{
    origin.X -= axis.X;
    origin.Y -= axis.Y;
    // rotation goes here
    origin.X += axis.X;
    origin.Y += axis.y;
}

这应该适用于任何类型的标准纹理。(当然,你不必有我创建的称为"轴"的Vector2——它只是为了方便参考。

现在,采用相同的逻辑并将其应用于3D。

一个建议:如果你试图通过3D逻辑工作,先看看2D的逻辑。十有八九,你会找到你想要的答案!

(如果我在Rotate()方法的换位过程中犯了任何错误,请让我知道——我有点累了,我没有测试它,但旋转应该是这样的,不是吗?)