#c# #visual-studio #xna
#c# #visual-studio #xna
Вопрос:
Как я могу заставить объект вращаться вокруг своей оси? т. Е. заставить луну вращаться как вокруг точки 0, 0, 0, так и вокруг своей собственной оси? До сих пор я смог выполнить только точку 0, 0, 0, используя компонент gametime и создавая матрицу вращения.
Ответ №1:
Переместите центр объекта в (0,0,0), выполните поворот и переместите обратно.
Ответ №2:
Допустим, у нас есть следующее:
class 2DMoon
{
Texture2D texture;
Vector2 axis;
Vector2 origin;
}
Исходной точкой может быть (0,0), но давайте предположим, что это что-то более сложное — что-то вроде (29,43). Теперь предположим, что ширина текстуры равна 50, а высота — 90.
Чтобы задать ось для текстуры, вокруг которой она будет вращаться, предполагая, что вам нужен центр, вы должны сделать следующее (предполагая, что начало координат (т. Е. загружены текущее положение) и текстура):
ось.X = (.5 * текстура.Ширина); ось.Y = (.5 * текстура.Высота);
Как вы знаете, для этого потребовалось бы придать оси вектор, равный (25,45).
Как указано выше в BlueRaja, затем вы могли бы создать метод, который выглядит следующим образом:
Rotate()
{
origin.X -= axis.X;
origin.Y -= axis.Y;
// rotation goes here
origin.X = axis.X;
origin.Y = axis.y;
}
Это должно работать для любого вида стандартной текстуры. (И, конечно, вам не обязательно иметь Вектор2, который я придумал, под названием «ось» — это просто для удобства использования.
Теперь возьмите ту же логику и примените ее к 3D.
Небольшой совет: если вы пытаетесь работать с логикой в 3D, сначала посмотрите на логику в 2D. в 9 случаях из 10 вы найдете ответ, который ищете!
(Если я допустил какую-либо ошибку во время перемещения в моем методе Rotate (), пожалуйста, дайте мне знать — я немного устал там, где нахожусь, и я не тестирую это, но вращение должно работать именно так, нет?)