3D - Матрица вращения из вектора направления (вперед, вверх, вправо)

Мне нужно получить матрицу вращения из вектора направления (vForward). У меня также есть векторы vRight и vUp. Все эти векторы являются единичными векторами.

Мне просто нужно получить матрицу вращения.

Чтобы получить матрицу вращения для вращения только в одной плоскости (xy), параллельной земле, я делаю следующее: XMMATRIX xmResult;

Vec3f vFwd = pPlayer->VForward;
vFwd.z = 0;
vFwd.Normalize();

xmResult = XMMatrixSet( vFwd.y,     -vFwd.x,    0,      0,
    vFwd.x,      vFwd.y,    0,      0,
    0,          0,          1,      0,
    0,          0,          0,      1);

Вышеприведенный код получает только матрицу вращения для вращения вокруг оси Z:

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

Coordinate System I'm using

Вот как я использую свою матрицу позже в коде:

XMStoreFloat3((XMFLOAT3*)&vStart, XMVector3Transform(XMLoadFloat3((XMFLOAT3*)&vStart), xmTransformation));
XMStoreFloat3((XMFLOAT3*)&vEnd, XMVector3Transform(XMLoadFloat3((XMFLOAT3*)&vEnd), xmTransformation));
5
задан Hooch 25 June 2012 в 14:11
поделиться