xna使对象围绕ITS轴移动(不在点0,0,0附近)

时间:2011-04-17 23:19:04

标签: c# visual-studio xna

如何让对象绕轴旋转?即月亮在点0,0,0和它自己的轴周围旋转?到目前为止,我只能通过使用游戏时间组件并创建旋转矩阵来完成0,0,0点。

2 个答案:

答案 0 :(得分:2)

将对象的中心移调到(0,0,0),进行旋转,然后转置回来。

答案 1 :(得分:1)

假设我们有以下内容:

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()方法换位过程中犯了任何错误,请让我知道 - 我在某处感到很累,而且我没有测试它,但轮换应该有效那样的,没有?)