Jump to content
Korean Random

Улучшенная система прицеливания / Advanced Aiming System


GPCracker

Recommended Posts

Эх... Это мало кто понимает, поскольку тут имеет место трехмерная геометрия. А ее как-то не все могут представить и понять. Тем более выполнять необходимые геометрические построения в голове.

1. Точка прицеливания должна находиться на линии прицеливания.

2. Вне зависимости от изменения увеличения и перемещения мыши она должна двигаться по сфере. Как по мне, так это наиболее адекватное и предсказуемое поведение, в то же время "совместимое" со снайперским режимом.

3. Как-то так

4. В снайперском режиме камера находится в танке, т.е. ее можно считать центром этой сферы - вуаля.

5. В аркадном камера хз где, центр сферы в танке, а линия прицеливания идет из камеры. Упс. Имеем место расчета точки пересечения сферы и прямой...

6. В снайперском - просто откладываем нужное расстояние по линии прицеливания.

Так ни кто не предлагает целится через габаритные точки.

Идея получить расстояние до цели, для фиксации дальномера.

Link to comment
Short link
Share on other sites

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

 

4Jp6PAk.jpg

 

 

елится через габаритные точки.

 

Не знаю что ты имел ввиду под словом "габаритные точки", однако в клиенте габаритные точки отсутствуют, они есть только на сервере и юзаются в механике засвета/маскировки, к прицеливанию они ни какого отношения не имеют. 

Edited by StranikS_Scan
Link to comment
Short link
Share on other sites

Я понимаю желание сделать все красиво.

Но вот есть  мод "Тылы" или "индикатор ближайшего противника" который расстояние до цели в любом режиме отображает.

 

post-26490-0-69161500-1445085215_thumb.jpg

 

Можно же взять из него метод получения расстояния для дальнейшей  фиксации дальномера на выбранной цели.

 

 

Edited by Scharfhobel
Link to comment
Short link
Share on other sites

Я понимаю желание сделать все красиво.

Но вот есть  мод "Тылы" или "индикатор ближайшего противника" который расстояние до цели в любом режиме отображает.

 

attachicon.gifshot_545.jpg

 

Можно же взять из него метод получения расстояния для дальнейшей  фиксации дальномера на выбранной цели.

 

Дальномер - это вообще-то: камера_игрока <----> танк_противника.

А ты сейчас смотришь на мод, который показывает дистанцию: танк_игрока <---> танк_противника. Связи вообще ни какой.

 

Стрельба в игре - штука сложная. Начать надо с того, что в игре есть автоматика. Это механизм автоматического наведения орудия танка (gunRotator, называется). Наводится он по камере игрока:

  • берется инфа о том, где и как расположена камера и вычисляется точка на ландшафте, куда смотрит центр камеры, который как известно совпадает с центром нарисованного на экране камеры прицела игрока
  • после этого к полученной выше инфе добавляется инфа о том, где стоит и как расположен танк игрока, его башня и пушка и затем математически вычисляется, траектория, углы поворота башни, пушки и танка, при которых возможно попадание в указанную точку на ландшафте
  • и уже на основе этой инфы gunRotator сам двигает башню и пушку и наводит их по этой траектории

 

Вот такая сложная система. Выше мы говорим о самом простом её элементе, находящемся в самом начале этого алгоритма - о дальномере. Это фича, которая показывает дистанцию от камеры до точки прицеливания. Эта инфа вычисляется в п.1 и затем юзается в п.2. Если дальномер хукнуть и подменить цифры на его выходе, то это окажет влияние и на работу всего остального механизма. Именно так и работает фиксация дальномера. Хукаем и подменяем.

 

Ты предлагаешь расстояние между камерой и точкой прицеливания заменить на расстояние между двумя танками. Думаю из выше описанного тебе будет понятно, что это приведет к полной фигне.

Link to comment
Short link
Share on other sites

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

Дальномеру нужно расстояние от точки вылета снаряда до точки прицеливания.

И думаю расстояние между 2 танками будет очень близко к этому.

Link to comment
Short link
Share on other sites

куда смотрит центр камеры, который как известно совпадает с центром нарисованного на экране камеры прицела игрока

Там в аркадном смещено немного, но смещение правильно учитывается.

Дальномеру нужно расстояние от точки вылета снаряда до точки прицеливания.

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

Фигню ты пишешь

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

 

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

Система подобна практически на 100% за исключением названий элементов. В нашем случае ты сидишь с камерой корректируешь, а танк стреляет. И танк не видит никаких целей, он видит только точку, через которую должна пройти пуля. И он ее туда посылает. Понятно объяснил?

Ты вообще можешь указать точку не относящуюся к цели никак, но если снаряд пролетая через нее, в кого-нибудь попадет - будет дамаг. Это как в тире, если ты встанешь за мишенью или перед ней - ты рискуешь поймать пулю. Можно на арте тупо в небо стрельнуть, и при этом случайно кого-нибудь сваншотить. Снаряд пролетит через указанную в небе точку и, не встретив там цели, полетит дальше. Если точку в небе указать правильно, можно и попадать весьма неплохо.

Иногда ты не видишь цель, представь что она прозрачная. Чтобы в нее попасть, тебе нужно определить ее координаты. Расстояние и вектор до нее. Вектор задается прицелом, а расстояние - вот в этом вся и заморочка. Для тебя оно в плоскости глубины картинки, но для стрелка оно имеет весьма большое значение - его нужно определить точно, иначе стрелок не попадет. Соответственно, если ты определишь расстояние как 600м и потом отбежишь назад на 300 и на 400 вправо, оно уже будет нифига не 600) Вот об этом и речь. Что в снайперском камера (корректировщик) находится рядом с танком (снайпером), а аркадном летает вокруг танка (бегает по полю).

Link to comment
Short link
Share on other sites

. Ты просто указываешь ему цель. Остальное делает он сам: считает баллистику, наводит винтовку и стреляет.

Хотите сказать что для наведения орудия нужно передать координаты точки и расстояние до нее от камеры ? т.е нужен вектор от наблюдателя к цели?

А сервак сам будет строить треугольник и решать уравнение 4-й степени с учетом баллистики?

Edited by Scharfhobel
Link to comment
Short link
Share on other sites

Хотите сказать что для наведения орудия нужно передать координаты точки и расстояние до нее от камеры ? т.е нужен вектор от наблюдателя к цели? А сервак сам будет строить треугольник и решать уравнение 4-й степени с учетом баллистики?

Не совсем. На сервер передается просто точка, куда ты хочешь стрельнуть. А сервер уже крутит пушку и т.д. независимо от клиента. Клиент тоже делает это независимо, поэтому маркер сведения есть клиентский, а есть серверный, модом добавляется. В бете был от картохи, потом выпилили, насколько мне известно. Штука нужная, добрые и грамотные люди запилили обратно.

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

Треугольник и уравнения сервер не будет. Как он отслеживает орудие мне не известно, но в момент выстрела он рассчитывает разброс (он угловой, в метры на 100м переведен для удобности восприятия), выбирает рандомно направление с учетом отклонения, затем уже имея вектор и точку выстрела, гравитацию и начальную скорость считает кусочками баллистическую траекторию до пересечения с любым препятствием.

Если честно, я не знаю точно всех основ синхронизации клиент-сервер, оно запилено на сях, с этим тебе лучше обратиться к ув. @StranikS_Scan, ибо тут надо либо исходники BW смотреть, старых версий, или клиент декомпилить, а у меня на это нет ни времени, ни особого желания. Ну или сам от нечего делать можешь скачать себе исходники BW, IDA и покопаться в недрах движка.

Link to comment
Short link
Share on other sites

Дальномер - это вообще-то: камера_игрока <----> танк_противника.

А ты сейчас смотришь на мод, который показывает дистанцию: танк_игрока <---> танк_противника. Связи вообще ни какой.

 

Стрельба в игре - штука сложная. Начать надо с того, что в игре есть автоматика. Это механизм автоматического наведения орудия танка (gunRotator, называется). Наводится он по камере игрока:

  • берется инфа о том, где и как расположена камера и вычисляется точка на ландшафте, куда смотрит центр камеры, который как известно совпадает с центром нарисованного на экране камеры прицела игрока
  • после этого к полученной выше инфе добавляется инфа о том, где стоит и как расположен танк игрока, его башня и пушка и затем математически вычисляется, траектория, углы поворота башни, пушки и танка, при которых возможно попадание в указанную точку на ландшафте
  • и уже на основе этой инфы gunRotator сам двигает башню и пушку и наводит их по этой траектории

 

Вот такая сложная система. Выше мы говорим о самом простом её элементе, находящемся в самом начале этого алгоритма - о дальномере. Это фича, которая показывает дистанцию от камеры до точки прицеливания. Эта инфа вычисляется в п.1 и затем юзается в п.2. Если дальномер хукнуть и подменить цифры на его выходе, то это окажет влияние и на работу всего остального механизма. Именно так и работает фиксация дальномера. Хукаем и подменяем.

 

Ты предлагаешь расстояние между камерой и точкой прицеливания заменить на расстояние между двумя танками. Думаю из выше описанного тебе будет понятно, что это приведет к полной фигне.

1. Спасибо, спасибо и ещё раз спасибище автору и всем, кто ему помогает, за этот мод.

2. Из общих ваших объяснений слышу, что мод корректно работает только для спецрежимов игры "Снайперский" и "Артиллерийский". Раньше была возможность в "Артприцеле"  правой кнопкой мыши фиксировать ствол - здесь в снайперском тот же самый параметр фиксируется ? 

Далее пропущено недальновидное предложение автору сделать для теста аркадного режима несколько вариантов мода с фиксацией разных переменных, чтобы желающие/страждущие сами в треньке отсеяли ошибочные или все.

      Понял, спасибо за молниеносный ответ.

Edited by kabka3_ha_tahke
Link to comment
Short link
Share on other sites

1. Спасибо, спасибо и ещё раз спасибище автору и всем, кто ему помогает, за этот мод.

2. Из общих ваших объяснений слышу, что мод корректно работает только для спецрежимов игры "Снайперский" и "Артиллерийский". Раньше была возможность в "Артприцеле"  правой кнопкой мыши фиксировать ствол - здесь в снайперском тот же самый параметр фиксируется ? 

Далее пропущено недальновидное предложение автору сделать для теста аркадного режима несколько вариантов мода с фиксацией разных переменных, чтобы желающие/страждущие сами в треньке отсеяли ошибочные или все.

 

Я скажу так - я не знаю как работает мод на самом деле. Потому я ни чего не пишу в этой теме про AAS так как хоть и видел мельком его код, но что там сделано и как работает имею представления только по отдельным комментам автора в данной теме. Однако, у меня есть опыт лазания по питон коду игры и написания кой-каких модов, затрагивающих механизм баллистики. Потому я имею конкретные представления о том как реализована баллистика в игре. Однако у ТС знаний в этом вопросе однозначно больше чем у меня.

 

 

Так что на меня не ориентируйтесь, ориентируйтесь на ТС-а.

Edited by StranikS_Scan
Link to comment
Short link
Share on other sites

Короче с аркадным режимом все ясно.

Не стоит овчинка выделки.

Да и сомнительна вероятность,  стрелять в аркадном режиме в  цель которая может пропасть из засвета.

Это же надо в далекую цель стрелять.

 

Тут вопрос возник,  пишут:

Учитывайте разницу высот при стрельбе, если цель выше вас, то возможен небольшой недолет, если ниже - перелёт.

Есть такое в механике игры?

 

И часто есть спам в питон логе:

 

WARNING: [WARNING] (scripts/client/AvatarInputHandler/AimingSystems/ArcadeAimingSystem.py, 188): Invalid arg for acos: -1.000000; distanceFromFocus: 60.000000, dir: (-0.778046, -0.698642, 1.43584)
WARNING: [WARNING] (scripts/client/AvatarInputHandler/AimingSystems/ArcadeAimingSystem.py, 188): Invalid arg for acos: -1.000000; distanceFromFocus: 65.000000, dir: (1.32492, -1.4671, -1.99747)
WARNING: [WARNING] (scripts/client/AvatarInputHandler/AimingSystems/ArcadeAimingSystem.py, 188): Invalid arg for acos: -1.000000; distanceFromFocus: 35.000000, dir: (1.40767, -0.985483, -0.624603)

Можно ли его как нибудь убрать?

Edited by Scharfhobel
Link to comment
Short link
Share on other sites

Учитывайте разницу высот при стрельбе, если цель выше вас, то возможен небольшой недолет, если ниже - перелёт.

Не совсем. Если цель ниже, снаряд с большей вероятностью может зайти в крышу, притом шанс попадания тоже будет немного больше, т.к. площадь цели к снаряду больше. Если цель ниже, стрельба снизу вверх, снаряд летит в борт. Шанс попадания немного ниже, т.к. снаряд может с нехилой вероятностью пройти рядом с башней.
Link to comment
Short link
Share on other sites

Не совсем. Если цель ниже, снаряд с большей вероятностью может зайти в крышу, притом шанс попадания тоже будет немного больше, т.к. площадь цели к снаряду больше. Если цель ниже, стрельба снизу вверх, снаряд летит в борт. Шанс попадания немного ниже, т.к. снаряд может с нехилой вероятностью пройти рядом с башней.

Расстояниее до цели береётся по прямой ? А снаряд летит по кривой ? Если прямая идёт вверх - кривая короче, снаряд летит меньшее время и пролетает меньшее расстояние - недолет. Если прямая идёт вниз - кривая длиннее, снаряд летит дольше, пролетает бОльшее расстояние - перелет. ВоТ так пока понимаю. Тестировал Арт-Прицелы на реплеях - есть пара модов-арт-прицелов, где время полета показывает отлИчное, от другой группы большинства модов-арт-прицелов. Все тестированные на тот момент прицелы были адаптированы Полироидом под 9.9

Link to comment
Short link
Share on other sites

Расстояниее до цели береётся по прямой ? А снаряд летит по кривой ? Если прямая идёт вверх - кривая короче, снаряд летит меньшее время и пролетает меньшее расстояние - недолет. Если прямая идёт вниз - кривая длиннее, снаряд летит дольше, пролетает бОльшее расстояние - перелет. ВоТ так пока понимаю.

Представь что на снаряд прицепили камеру с крестиком (как в управляемой ракете), и ты наблюдаешь его полет. Тогда думаю тебе будет понятно, что такое площадь танка к снаряду. Сверху танк выглядит прямоугольником, сбоку - меньший по площади прямоугольник с вырезанными верхними углами по бокам от башни.
Link to comment
Short link
Share on other sites

Объясните мне тупому зачем индикатор зума выводится в прицелах?

Для кого-то это может быть полезно при выборе упреждения, ну или еще для чего.
Link to comment
Short link
Share on other sites

Подскажите, что за хрень вылазит даже на чистом клиенте?

/------------------------------------------------------------------------------------------\
BigWorld worldoftanks 2.8.0 (compiled at 17:59:40 Aug 21 2015) starting on 10/21/15 22:45:45

INFO: [Config] Default encoding set to utf-8
INFO: [PY_DEBUG] BigWorld Release Client - Content Type: sd

INFO: [PY_DEBUG] Checking ./res_mods/0.9.10: mods not found
NOTICE: [NOTE] (scripts/client/post_processing/__init__.py, 267): The quality = 4 was selected.
NOTICE: [NOTE] (scripts/client/post_processing/__init__.py, 267): The quality = 3 was selected.
NOTICE: [NOTE] (scripts/client/ConnectionManager.py, 155): User authentication method: token2
NOTICE: [NOTE] (scripts/client/game.py, 428): [sPACE] Loading space: spaces/hangar_premium_v2
NOTICE: [NOTE] (scripts/client/game.py, 428): [sPACE] Loading space: spaces/63_tundra
WARNING: [WARNING] (scripts/client/gui/shared/event_bus.py, 25): Handler is already subscribed ('lobbyViewLoaded', >, 0)
NOTICE: [NOTE] (scripts/client/game.py, 428): [sPACE] Loading space: spaces/hangar_premium_v2
INFO: PostProcessing.Phases.fini()

\------------------------------------------------------------------------------------------/
Link to comment
Short link
Share on other sites

Подскажите, что за хрень вылазит даже на чистом клиенте?

/------------------------------------------------------------------------------------------\

BigWorld worldoftanks 2.8.0 (compiled at 17:59:40 Aug 21 2015) starting on 10/21/15 22:45:45

 

INFO: [Config] Default encoding set to utf-8

INFO: [PY_DEBUG] BigWorld Release Client - Content Type: sd

 

INFO: [PY_DEBUG] Checking ./res_mods/0.9.10: mods not found

NOTICE: [NOTE] (scripts/client/post_processing/__init__.py, 267): The quality = 4 was selected.

NOTICE: [NOTE] (scripts/client/post_processing/__init__.py, 267): The quality = 3 was selected.

NOTICE: [NOTE] (scripts/client/ConnectionManager.py, 155): User authentication method: token2

NOTICE: [NOTE] (scripts/client/game.py, 428): [sPACE] Loading space: spaces/hangar_premium_v2

NOTICE: [NOTE] (scripts/client/game.py, 428): [sPACE] Loading space: spaces/63_tundra

WARNING: [WARNING] (scripts/client/gui/shared/event_bus.py, 25): Handler is already subscribed ('lobbyViewLoaded', >, 0)

NOTICE: [NOTE] (scripts/client/game.py, 428): [sPACE] Loading space: spaces/hangar_premium_v2

INFO: PostProcessing.Phases.fini()

 

\------------------------------------------------------------------------------------------/

это спам, реклама от модов.

На чистом такого нет.

Проверь целостность клиента.

Link to comment
Short link
Share on other sites

это спам, реклама от модов.

На чистом такого нет.

 

И проверил и все почистил ручками, даже AppData и все равно! Помогите разобраться, а то у меня такая солянка модов и питонов лог теперь как война и мир (по размеру). Решил по одному ставить и отлавливать, а тут на чистом поперло сразу :gg:

/------------------------------------------------------------------------------------------\

BigWorld worldoftanks 2.8.0 (compiled at 17:59:40 Aug 21 2015) starting on 10/21/15 23:44:30

 

INFO: [Config] Default encoding set to utf-8

INFO: [PY_DEBUG] BigWorld Release Client - Content Type: sd

 

INFO: [PY_DEBUG] Checking ./res_mods/0.9.10: mods not found

NOTICE: [NOTE] (scripts/client/post_processing/__init__.py, 267): The quality = 4 was selected.

NOTICE: [NOTE] (scripts/client/post_processing/__init__.py, 267): The quality = 3 was selected.

NOTICE: [NOTE] (scripts/client/ConnectionManager.py, 155): User authentication method: token2

NOTICE: [NOTE] (scripts/client/account_helpers/settings_core/options.py, 657): Change state of voip: (True,)

NOTICE: [NOTE] (scripts/client/game.py, 428): [sPACE] Loading space: spaces/hangar_premium_v2

NOTICE: [NOTE] (scripts/client/account_helpers/settings_core/options.py, 657): Change state of voip: (False,)

NOTICE: [NOTE] (scripts/client/game.py, 428): [sPACE] Loading space: spaces/63_tundra

WARNING: [WARNING] (scripts/client/gui/shared/event_bus.py, 25): Handler is already subscribed ('lobbyViewLoaded', >, 0)

NOTICE: [NOTE] (scripts/client/game.py, 428): [sPACE] Loading space: spaces/hangar_premium_v2

INFO: PostProcessing.Phases.fini()

 

\------------------------------------------------------------------------------------------/

Link to comment
Short link
Share on other sites

И проверил и все почистил ручками, даже AppData и все равно! Помогите разобраться, а то у меня такая солянка модов и питонов лог теперь как война и мир (по размеру). Решил по одному ставить и отлавливать, а тут на чистом поперло сразу :gg:

/------------------------------------------------------------------------------------------\

BigWorld worldoftanks 2.8.0 (compiled at 17:59:40 Aug 21 2015) starting on 10/21/15 23:44:30

 

INFO: [Config] Default encoding set to utf-8

INFO: [PY_DEBUG] BigWorld Release Client - Content Type: sd

 

INFO: [PY_DEBUG] Checking ./res_mods/0.9.10: mods not found

NOTICE: [NOTE] (scripts/client/post_processing/__init__.py, 267): The quality = 4 was selected.

NOTICE: [NOTE] (scripts/client/post_processing/__init__.py, 267): The quality = 3 was selected.

NOTICE: [NOTE] (scripts/client/ConnectionManager.py, 155): User authentication method: token2

NOTICE: [NOTE] (scripts/client/account_helpers/settings_core/options.py, 657): Change state of voip: (True,)

NOTICE: [NOTE] (scripts/client/game.py, 428): [sPACE] Loading space: spaces/hangar_premium_v2

NOTICE: [NOTE] (scripts/client/account_helpers/settings_core/options.py, 657): Change state of voip: (False,)

NOTICE: [NOTE] (scripts/client/game.py, 428): [sPACE] Loading space: spaces/63_tundra

WARNING: [WARNING] (scripts/client/gui/shared/event_bus.py, 25): Handler is already subscribed ('lobbyViewLoaded', >, 0)

NOTICE: [NOTE] (scripts/client/game.py, 428): [sPACE] Loading space: spaces/hangar_premium_v2

INFO: PostProcessing.Phases.fini()

 

\------------------------------------------------------------------------------------------/

Ради интереса загрузился без модов:

 

/------------------------------------------------------------------------------------------\

BigWorld worldoftanks 2.8.0 (compiled at 17:59:40 Aug 21 2015) starting on 10/21/15 20:07:25

INFO: [Config] Default encoding set to utf-8

INFO: [PY_DEBUG] BigWorld Release Client - Content Type: sd

INFO: [PY_DEBUG] Checking ./res_mods/0.9.10: mods not found

NOTICE: [NOTE] (scripts/client/post_processing/__init__.py, 267): The quality = 4 was selected.

NOTICE: [NOTE] (scripts/client/post_processing/__init__.py, 267): The quality = 3 was selected.

NOTICE: [NOTE] (scripts/client/ConnectionManager.py, 155): User authentication method: token2

NOTICE: [NOTE] (scripts/client/game.py, 428): [sPACE] Loading space: spaces/hangar_v2

INFO: PostProcessing.Phases.fini()

Edited by Scharfhobel
Link to comment
Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...