Простой ответ заключается в том, что часть рендеринга сцены включает в себя преобразование мировых координат в координаты вида - где все это относительно моих глазных яблок, в основном.
Плоскость обзора — это экран, на котором сидит мышь. Если координаты вашей мыши (xx, yy), то она, вероятно, расположена либо (xx, yy, 1), либо (xx, yy, -1) в координатах вида. Вам, вероятно, потребуется использовать систему, в которой (0, 0) является центром вашего окна просмотра на экране - не так, как обычно работают координаты мыши, но постоянные смещения достаточно просты.
zz=0 — это место, где находится игрок, тогда как плоскость обзора находится на небольшом расстоянии впереди, между игроком и тем, что он может видеть. Вот почему плоскость обзора принимается как (xx, yy, 1) или (xx, yy, -1) здесь - если вы используете +1 (нормальный случай, я думаю) объекты с координатами вида, которые имеют положительный z находятся перед вами.
Чтобы преобразовать это обратно в мировые координаты, примените то же преобразование, что и для преобразования ваших мировых координат в координаты просмотра, но в обратном порядке. Затем вы получаете положение указателя мыши в мировых координатах. Чтобы получить вектор направления, вычтите позицию вашего игрока.
Обратное преобразование использует обратную матрицу на каждом шаге и применяет шаги назад. В принципе, все шаги можно объединить в одну матрицу, а для всего преобразования можно вычислить обратную матрицу — но это не лучший подход. Например, гораздо проще вычислить обратную матрицу вращения, чем общую обратную матрицу. Если ваше преобразование из мировых координат в координаты представления составлено по мере необходимости из компонентов (положение, ориентация...), вам действительно нужно только вычислить инверсные компоненты и объединить их. Вместо 30 градусов влево (от мира к взгляду) вы используете 30 градусов вправо (от взгляда к миру) и т. д.
Если вам повезет, вы, возможно, сможете полностью отбросить всю проблему положения игрока - вычислить угол для указателя мыши в пространстве обзора (для этого достаточно углов Эйлера), затем применить ориентационную часть только к обзору. -преобразование мира.
Нет, вот формула, извините, отчасти потому, что преобразование вида в мир зависит от того, как вы выполняете преобразование мира в вид, а частично потому, что у меня нет простого примера.
Хотя вопрос другой, вы можете найти соответствующие ссылки в ответах здесь...
Матричное умножение - представление/проекция, мир/проекция и т. д.
person
Steve314
schedule
27.07.2010