Перейти к содержанию

Принцип создания свободной камеры в играх.


Рекомендуемые сообщения

FreeCam - свободная камера, подразумевает возможность полёта камеры отдельно от объекта/персонажа и тому подобного, используется в самых разных целях, для обнаружения противников, для создания красивых снимков, для нахождения секретов и тому подобного.

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

Создание свободной камеры на примере игры "WarThunder":
 

Спойлер

 


Видео где показан принцип работы формул: тык

 

  • Понравилось 6
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

@inaginary, дошли руки посмотреть видос. Пока ещё на 30 минуте.
весело наблюдать как ты пытаешься найти ошибки при объявлении переменных,
либо нужно было все метки в одну через db 0(и флаг туда тоже,
либо чтобы не путаться (и для наглядности пользователям) все метки сделать по 4 байта через dd 0 с пропуском по 4 байта.
Ладно продолжу просмотр.

 

Ссылка на комментарий
Поделиться на другие сайты

16 часов назад, Garik66 сказал:

весело наблюдать как ты пытаешься найти ошибки при объявлении переменных

Мне казалось там dd а не db, с кем не бывает? ? Конечно в db float не запишется...

Ссылка на комментарий
Поделиться на другие сайты

37 минут назад, inaginary сказал:

Конечно в db float не запишется...

почему - ещё как запишется.

Кажется в СЕ 6.8.3, я установил наконец-то, этого бага нету. Но проверял на Туториале 64 бит. Точно не помню но раньше эта проблема вроде была.

при регистрации адреса выделялось 8 байт.

И потому приходилось изгаляться.

Несколько способов.

1. Всё объявляем dq 0 - все метки.

2. одну переменную db и в ней что угодно db 1 (float)3 (f;oat))360 (int)10

3. Объявляем (как и в первом способе различными метками, но юзаем разделители.   

Metka1:   
  db 0
db 00 00 00 00 00 00 00 // 7 байт разделитель
Metka2:
  dd (float)66
db 00 00 00 00          // 4 байт разделитель
Menka3: 
  dq (double)2          // здесь без разделителя.  

 

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, Garik66 сказал:

ещё как запишется

Оно может и запишется, но не в байт, а 4 займёт, если большое число то в любом случае в байт не влезет ведь.
а ещё, в 64 даже инструкции в 4 байта внедряются с пропусками занятыми нопами, куча места тратится зря

 

Изменено пользователем inaginary
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, inaginary сказал:

если большое число то в любом случае в байт не влезет ведь

Смотря как писать, мы же привычны на костыли :D:

Спойлер

image.thumb.png.932bf7755da3e57bbb53cb6d7e373bc5.png

 

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, mumut сказал:

А как ты в видео нашел поворот камеры ?

Либо неизвестное изменилось/не изменилось (не изменилось поаккуратнее может и поменяться) Обычно значение от - 1 до 1
У  @inaginary -3 3  в игре.
Либо искать координаты самой камеры но повлиять на них не сможешь - углы будут рядом.
также можно выйти от координат твоего персонажа, если имеешь опыт работы с регионом памяти

 

Ссылка на комментарий
Поделиться на другие сайты

34 минуты назад, Garik66 сказал:

Обычно значение от - 1 до 1

А значение меняется когда камера поворачивается то есть мышку повернул или когда координаты камеры меняются то есть когда ходишь ?

Ссылка на комментарий
Поделиться на другие сайты

56 минут назад, mumut сказал:

А значение меняется когда камера поворачивается то есть мышку повернул или когда координаты камеры меняются то есть когда ходишь ?

Персонажа не трогай, а двигай только обзор камеры

 

Ссылка на комментарий
Поделиться на другие сайты

То - как работают разные формулы и как это выглядит на сфере.

 

 

Формула:
X = Rad*cos(AngV) * cos(AngG)
Y = Rad*sin(AngG)*cos(AngV)
Z = Rad*sin(AngV)

 

Изменено пользователем inaginary
Ссылка на комментарий
Поделиться на другие сайты

В 09.02.2019 в 17:37, imaginary сказал:

Всё зависит от типа игры.

А знаешь ли ты как показать модель ГГ при свободной камере что бы было понятно где находится персонаж ?

Ссылка на комментарий
Поделиться на другие сайты

43 минуты назад, mumut сказал:

показать модель ГГ при свободной камере

В Borderlands я сомневаюсь что это сработает, так как там нету вида от 3 лица, только при просмотре навыков. Но там вероятно статическая модель с анимацией, а ходьба и пр не анимируются, потому что незачем. Так что - вероятно никак. Но если очень хочешь то можешь попробовать поискать что меняется при просмотре древа навыков. (предполагаю что ты конкретно про эту игру так как все время в ней сидишь)

Ссылка на комментарий
Поделиться на другие сайты

29 минут назад, imaginary сказал:

(предполагаю что ты конкретно про эту игру так как все время в ней сидишь)

Borderlands это подопытный кролик я тренируюсь на этой игре делать читы. Просто в этом деле я новичок.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.