如何让对象绕轴旋转?即月亮在点0,0,0和它自己的轴周围旋转?到目前为止,我只能通过使用游戏时间组件并创建旋转矩阵来完成0,0,0点。
答案 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()方法换位过程中犯了任何错误,请让我知道 - 我在某处感到很累,而且我没有测试它,但轮换应该有效那样的,没有?)