Найти, как высоко камера смотрит с матрицей вращения - PullRequest
0 голосов
/ 21 марта 2012

Я работаю над FPS с библиотекой jPCT.Одна ключевая вещь, которая нужна всем FPS, состоит в том, чтобы не дать игрокам заглянуть за них, потянув мышь слишком далеко вверх / вниз.В настоящее время я использую пример кода, найденного на веб-сайте jPCT, который отслеживает, сколько углов было добавлено в камеру, но меня беспокоит проблема округления со всеми углами в радианах.Я могу получить Матрицу вращения от камеры jPCT, и я знаю, что она содержит информацию, чтобы выяснить, как высоко "смотрится" игрок, но я понятия не имею, как вытащить ее из матрицы.

Что бы я искал в матрице вращения, которая скажет мне, если игрок смотрит больше «вверх», чем пролив вверх и более «вниз», чем пролив вниз?

1 Ответ

0 голосов
/ 21 марта 2012

Если вы обновляете свою матрицу каждый раз, когда игрок движется, у вас будут проблемы из-за ошибок с плавающей запятой, и ваша матрица вращения превратится в матрицу перекоса.Одно из решений состоит в том, чтобы время от времени ортонормировать матрицу, но обычно лучше просто держать высоту, рыскание (и крен игрока, если вам это нужно) плавающими и строить свою матрицу из этих углов, когда игрок меняет ориентацию, смотрит вверх / внизи т. д. Если вы используете оптимизированный код для каждого угла (или один метод для преобразования углов Эйлера в матрицу), это не медленнее, чем то, что вы делаете сейчас.Вы не столкнетесь с проблемами блокировки карданного подвеса, так как ориентация камеры все равно будет ограничена.

Что касается вашего конкретного вопроса, я думаю, вам нужно рассчитать угол между осью матрицы Z (третий ряд или столбец,зависит от ориентации ваших матриц) и не повернутого вектора, направленного вниз по оси Z.

...