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()方法中进行换位时出现任何错误,请告诉我 - 我在哪里感到疲倦,而且我没有测试它,但轮换应该像那样工作,不是吗?)