Рассчитать взгляд на матрицу на местности

Надеясь, что кто-то может мне помочь. У меня есть картинг на местности, из которого я получаю положение центра картинга, левого переднего колеса и правого переднего колеса. Что мне нужно, так это матрица, чтобы вращать карт, чтобы он лежал ровно на местности.

Все vector3. Вперед вектор направления.

Пока у меня есть это, но это не работает, как ожидалось

D3DXVECTOR3 cross, cross1;
    cross = kartposition - Lwheelposition;
    cross1 = kartposition - Rwheelposition;
    D3DXVec3Cross(&up, &cross, &cross1);
    D3DXVec3Normalize(&up, &up);

    D3DXVec3Cross(&right, &forward,&up);
    D3DXVec3Normalize(&right, &right);
    D3DXVec3Cross(&forward,  &up,&right);
    D3DXVec3Normalize(&forward, &forward);



    D3DXMatrixLookAtLH(&localtransform[0], &D3DXVECTOR3(0, 0, 0) ,&(forward), &up);

Любой совет будет отличным.

Решено, я верю.

Изменить 2 строки на

cross = Lwheelposition-kartposition; cross1 =Rwelelposition - картография;

и добавил в конец

D3DXMatrixInverse(&localtransform[0], значение NULL,&localtransform[0]);

инвертировать действие взгляда на функцию.

1 ответ

Решение

С тех пор я пересмотрел и решил это, обращаясь к

(DirectX) Генерация матрицы вращения в соответствии с вектором

Окончательный код выглядит следующим образом.

D3DXVECTOR3 cross, cross1;
        cross = Lwheelposition - kartposition;
        cross1 = Rwheelposition - kartposition;
        D3DXVec3Cross(&up, &cross, &cross1);
        D3DXVec3Normalize(&up, &up);

        D3DXVec3Cross(&right, &up,&forward);
        D3DXVec3Normalize(&right, &right);
        D3DXVec3Cross(&kartforward, &right, &up);
localtransform[0]=D3DXMATRIX (right.x, right.y, right.z, 0.0f,
            up.x, up.y, up.z, 0.0f,
            kartforward.x, kartforward.y, kartforward.z, 0.0f,
            kartposition.x, kartposition.y, kartposition.z, 1.0f);

Надеюсь, это полезно.

Другие вопросы по тегам