Мне показалось, что я достаточно хорошо понял матричную математику, но, видимо, я не в курсе
Вот настройка:
У меня есть объект в [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 отлично работает для позиционирования камеры!