У меня серьезные проблемы с пониманием матрицы представления в XNA. Я прошел довольно далеко со всеми остальными частями, и, поскольку я только что выучил необходимые математические навыки, я не хочу использовать встроенные функции Matrix, не понимая, что они делают в первую очередь.
Теперь я понимаю основы вращения, проекции и перевода, но не могу понять, как работает матрица представления в XNA.
Исходя из того, что я собрал, матрица представления должна преобразовать "мир" в его собственное пространство. Кажется разумным, но метод Matrix.CreateLookAt в библиотеке довольно озадачивает.
Я установил (проверяя, что выводит библиотечная функция), что эти два фрагмента кода дают одинаковые результаты:
Matrix view = Matrix.CreateReflection(new Plane(Vector3.UnitX, 0)) * Matrix.CreateReflection(new Plane(Vector3.UnitZ, 0)) * Matrix.CreateTranslation(Position);
// ..equals this if (Position = (0 0 -5), since LookAt "looks at" but the above just looks straight down Z)..
Matrix blah = Matrix.CreateLookAt(Position, Vector3.Zero, Vector3.UnitY);
Зачем переворачивать оси X и Z? Я думал, что вы должны повернуть мир в соответствии с вращением камер, но в противоположном направлении, а затем перевести мир на ту же величину в противоположном направлении.
Или матрица вида вообще не используется как преобразование, а просто кодирует положение и поворот камеры в мире?