XNA: получить Vector3 от Matrix - PullRequest
       27

XNA: получить Vector3 от Matrix

3 голосов
/ 22 августа 2010

Мне показалось, что я достаточно хорошо понял матричную математику, но, видимо, я не в курсе

Вот настройка:

У меня есть объект в [0,0,0] в мировом пространстве.У меня есть класс камеры, управляемый движениями мыши, чтобы вращать и масштабировать объект так, чтобы он всегда смотрел на него.Вот как я вычисляю свою viewMatrix по камере:

public Matrix viewMatrix { 
    get {
        return 
            Matrix.CreateFromAxisAngle(Vector3.Up, rotAngle)
                * Matrix.CreateFromAxisAngle(Vector3.Left, pitchAngle)
                * Matrix.CreateTranslation(0, 0, distance) 
        ;
    }
}

Мне нужно иметь возможность определить положение камеры в мировом пространстве, чтобы я мог определить расстояние до нее - особенно откаждое лицо коробки. Как я могу получить положение xyz камеры в координатах мирового пространства?

Я пытался:

// all of these only return [0, 0, distance];
Vector3 pos = Vector3.Transform(Vector3.Zero, viewMatrix);
Vector3 pos = viewMatrix.Translation;
Vector3 pos = new Vector3(viewMatrix.M41, viewMatrix.M42, viewMatrix.M43);

Кажется, что информация о вращении как-то теряется.Странно то, что код viewMatrix отлично работает для позиционирования камеры!

Ответы [ 2 ]

7 голосов
/ 23 августа 2010

или немного упростить:

Vector3 pos = Matrix.Invert (просмотр). Перевод;

2 голосов
/ 22 августа 2010

Еще раз, я выясняю проблему в течение нескольких секунд после публикации вопроса:

Мне нужно было инвертировать матрицу вида. Информация о повороте была потерянной, потому что она не играет никакой роли в расчете расстояния, пока матрица вида не будет инвертирована. Вращение было в неправильном «конце» преобразования.

Vector3 pos = Vector3.Transform(Vector3.Zero, Matrix.Invert(viewMatrix));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...