xna使对象围绕其轴移动(而不是围绕点0,0,0)
本文关键字:移动 对象 xna | 更新日期: 2023-09-27 17:50:29
如何使对象绕其轴旋转?也就是说,让月球围绕点0,0,0和它自己的轴旋转?到目前为止,我只能通过使用gametime组件和创建旋转矩阵来处理点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()方法的换位过程中犯了任何错误,请让我知道——我有点累了,我没有测试它,但旋转应该是这样的,不是吗?)