xna让物体绕着ITS轴移动(不在点0,0,0附近)
问题描述:
如何使物体绕其轴旋转?即让月亮在0,0,0点和它自己的轴周围旋转?到目前为止,我只能通过使用游戏时间组件并创建旋转矩阵来完成点0,0,0点。xna让物体绕着ITS轴移动(不在点0,0,0附近)
答
将对象的中心转置为(0,0,0),执行旋转并转回。
答
比方说,我们有以下几点:
class 2DMoon
{
Texture2D texture;
Vector2 axis;
Vector2 origin;
}
原点可以是(0,0),但是让我们说这是更复杂的东西 - 像(29,43)。现在让我们假设纹理的宽度为50,高度为90.假设你想要中心,你可以做以下操作(假设原点(即电流)位置)和纹理加载):
axis.X =(.5 * texture.Width); axis.Y =(.5 * texture.Height);
如您所知,这将使轴成为(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中的逻辑,10次中有9次,你会发现你正在寻找的答案!
(如果我在我的Rotate()方法中进行换位时出现任何错误,请告诉我 - 我在哪里感到疲倦,而且我没有测试它,但轮换应该像那样工作,不是吗?)