Камера

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Deutsch (de)Русский (ru)Translate (Translate)

Контролеры камеры в Source SDK

Контролеры камеры расположены в нескольких исходных файлах, но большая часть их централизована в классе CInput (или CSDKInput). Большинство настроек и управление камерой доступны путем прямого редактирования методов класса CInput, или путем внесения ваших изменений в класс-заглушку CSDKInput. Имейте ввиду, что еслы вы напрямую отредактируете класс CInput, это может сильно усложнить обновление Source SDK; с другой стороны, если вы решили работать через класс CSDKInput, то вам придется переопределять и заменять большое число методов класса CInput.

Основные понятия

Прежде чем начать, мы должны рассмотреть, как представлена камера в движке. Положение и направление камеры обычно представлены как набор сдвигов координат относительно игрока. Вы можете считать что эти смещения являются набором указаний, говорящих как позиционировать камеру относительно положения игрока:

  • Во-первых, вращение вокруг вертикальной оси с помощью смещения компоненты вектора yaw (он поворачивает камеру влево или вправо).
  • Далее, поворот вокруг горизонтальной оси с помощью смещения компонента вектора pitch (он перемещает камеру вверх или вниз).
  • Наконец, перемещение назад по направлению от текущего положения через компонент вектора distance.

Смещение камеры хранится в векторе m_vecCameraOffset. У вас есть доступ к компонентам pitch, yaw, и distance с помощью предустановленного набора значений (PITCH, YAW, и DIST) перечисления (enum) .

Соответствующие файлы

Основные файлы:

  • game\client\iinput.h содержит расширение абстрактного класса CInput.
  • game\client\input.h содержит главный класс CInput.
  • game\client\in_camera.cpp содержит большинство расширений режима камеры от третьего лица.
  • game\client\sdk\sdk_in_main.cpp содержит класс CSDKInput, который используется для переопределения функциональности класса CInput.

Дополнительные файлы:

  • game\client\in_mouse.cpp содержит код специфичный для обновления смещения идеальной камеры (ideal camera) основанного на движении мышки в режиме от третьего лица.

Как работает камера от третьего лица

Класс CInput имеет полный доступ к вводу клавиатуры и мыши клиента. Он может использовать информацио о перемещении мышки для влияния на положение камеры. По перемещению камеры клиент обновляет переменные cam_idealpitch and cam_idealyaw для предоставления информации об идеальном положении камеры. Используя эту информацию, метод CInput::CAM_Think будет обновлять фактические смещения камеры для отслеживания перемещения мышки. Это отслеживание осуществляется с небольшим отставанием чтобы добавить красивый эффект слежения вместо немедленногой привязки к новой позиции.

Кроме того, метод CInput::CAM_Think осуществляет базовое определение столкновений с камерой, чтобы убедиться что камера не пробьет стену. Камеру будет автоматически перемещаться ближе к игроку в том случае, когда что-то лежит между игроком и позицией камерой.