Делать объект на орбите фиксированной точкой в ​​DirectX? - PullRequest
0 голосов
/ 10 ноября 2009

Я пытаюсь заставить очень простой объект вращаться вокруг фиксированной точки в 3dspace.

В основном мой объект создается из одного D3DXVECTOR3, который указывает текущую позицию объекта относительно одной постоянной точки. Давайте просто скажем 0,0,0.

Я уже вычисляю свой угол на основе текущего игрового времени дня.

Но как я могу применить этот угол к позиции, чтобы она вращалась?

: (

Извините, я довольно новичок в Directx.

1 Ответ

1 голос
/ 10 ноября 2009

Так вы пытаетесь построить солнце или луну?

Если это так, то предполагается, что ваш небесный объект является чем-то вроде сферы, в центре которой (0,0,0).

Вероятно, самый простой способ повернуть его в нужное положение - сделать что-то вроде следующего

D3DXMATRIX matRot;
D3DXMATRIX matTrans;
D3DXMatrixRotationX( &matRot, angle );
D3DXMatrixTranslation( &matTrans, 0.0f, 0.0f, orbitRadius );
D3DXMATRIX matFinal = matTrans * matRot;

Затем установите эту матрицу в качестве матрицы мира.

Что он делает, так это создает матрицу вращения для поворота объекта на «угол» вокруг оси X (то есть в плоскости Y-Z); Затем он создает матрицу, которая выталкивает ее в соответствующее место под углом 0 (orbitRadius может быть лучше в качестве 3-го параметра в вызове перевода, в зависимости от того, где находится ваша нулевая точка). Последняя строка умножает эти 2 матрицы вместе. Матричные умножения не являются коммутативными (т. Е. M1 * M2! = M2 * M1). То, что сделано выше, это перемещение объектов orbitRadius по оси Z, а затем вращение вокруг точки (0, 0, 0). Вы можете думать о вращении объекта, который находится в вашей руке. Если orbitRadius - это расстояние от локтя до руки, то любое вращение вокруг локтя (в 0,0,0) будет образовывать дугу в воздухе.

Я надеюсь, что это поможет, но я действительно рекомендовал бы серьезно заняться чтением по линейной алгебре. Чем больше вы знаете, тем легче будет решить такие вопросы:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...