Камера - valve developer community

Контролери камери в 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 здійснює базове визначення зіткнень з камерою, щоб переконатися що камера не проб'є стіну. Камеру буде автоматично переміщатися ближче до гравця в тому випадку, коли щось лежить між гравцем і позицією камерою.

Схожі статті