Простой ответ заключается в том, что часть рендеринга сцены включает в себя преобразование мировых координат для просмотра координат - где все это относится к моим глазным яблокам, в основном.
Плоскость просмотра - это экран, на котором находится мышь. Если ваши координаты мыши (xx, yy), то они, вероятно, расположены в координатах (xx, yy, 1) или (xx, yy, -1). Вам, вероятно, понадобится использовать систему, где (0, 0) является центром вашего экрана просмотра на экране, а не как координаты мыши, как правило, работают, но постоянные смещения достаточно просты.
zz = 0 где игрок, тогда как плоскость обзора находится на небольшом расстоянии спереди, между игроком и тем, что он видит. Поэтому плоскость представления принимается как (xx, yy, 1) или (xx, yy, -1) здесь - если вы используете объекты +1 (нормальный случай, я думаю) с координатами вида, которые имеют положительные z перед вами.
Чтобы преобразовать это обратно в мировые координаты, примените то же преобразование, которое вы делаете, чтобы преобразовать ваши мировые координаты для просмотра координат, но назад. Затем вы получаете указатель мыши в мировых координатах. Чтобы получить вектор направления, вычтите позицию своего игрока.
Обратное преобразование использует обратную матрицу на каждом шаге и применяет шаги назад. В принципе, все этапы могут быть объединены в единую матрицу, а инверсная матрица может быть рассчитана для всего преобразования - но это не лучший подход. Например, гораздо проще вычислить инверсию вращения, чем вычислять общую матрицу обратную. Если ваше преобразование из мировых координат в координаты просмотра составлено по мере необходимости из компонентов (положение, ориентация ...), вам действительно нужно только вычислить инверсные компоненты и объединить их. Вместо 30-градусного левого (из мира для просмотра) вы используете 30-градусный правый (из вида в мир) и т. Д.
Если вам повезет, возможно, вам удастся полностью решить проблему игрока полностью - вычислить угол для указателя мыши в пространстве вида (для этого достаточно углов Эйлера), затем примените ориентационную часть только преобразования вида к миру.
Нет, здесь формула, извините, отчасти потому, что преобразование «вид в мир» зависит от того, как вы преобразуете мир в точку зрения, а отчасти потому, что у меня нет простого примера.
Хотя вопрос другой, вы можете найти некоторые соответствующие ссылки в ответах здесь ...
Matrix multiplication - view/projection, world/projection, etc
Используйте сферические или цилиндрические координаты .... –