Допустим, у нас есть следующее:
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. 9 раз из 10 вы найдете ответ, который ищете!
(Если я допустил какую-либо ошибку во время транспонирования в моем методе Rotate (), пожалуйста, дайте мне знать - я немного устал, и я не проверяю это, но вращение должно работать вот так, нет?)