SkepticalFox Posted February 12, 2022 Share Posted February 12, 2022 @Dragon armor acos() взять от dot product этого вектора с вектором поворота gun/turret @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted February 12, 2022 Author Share Posted February 12, 2022 7 минут назад, SkepticalFox сказал: у тебя там похоже матрица, или кватернион, сам смотри) У меня сейчас только положение башни и орудия. Матрица будет позже, кватернион не нужен здесь, поворот вокруг одной оси только. Как мне угол узнать, на какой нужно повернуть башню и орудие? 1 минуту назад, SkepticalFox сказал: с вектором поворота gun/turret Это какой столбец матрицы? Или как его получить, если это не столбец? @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted February 12, 2022 Share Posted February 12, 2022 dot product двух нормированных векторов даст cos угла, а чтобы получить угол нужен acos @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted February 12, 2022 Author Share Posted February 12, 2022 3 минуты назад, SkepticalFox сказал: с вектором поворота gun/turret У меня есть какая-то функция по переводу матрицы в вектор поворота. Только это перевод в yaw, pitch, roll, мне же один параметр нужен. Yaw для башни и Pitch для орудия. 1 минуту назад, SkepticalFox сказал: dot product двух нормированных векторов даст cos угла, а чтобы получить угол нужен acos Как угол между векторами узнать - легко. Для меня не понятно, как угол для башни и орудия найти. Повернуть надо по одной оси для башни и орудия. Вот эти углы надо найти. @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted February 12, 2022 Share Posted February 12, 2022 (edited) 7 minutes ago, Dragon armor said: Как угол между векторами узнать - легко. Для меня не понятно, как угол для башни и орудия найти. Повернуть надо по одной оси для башни и орудия. Вот эти углы надо найти. так формулы те же, просто вектора надо собрать правильно лучше визуализируй это как-то, можно в blender через constraints Edited February 12, 2022 by SkepticalFox @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted February 12, 2022 Author Share Posted February 12, 2022 Только что, SkepticalFox сказал: просто вектора надо собрать правильно Вот это мне и надо. Трудности с этим возникли непреодолимые. Башня поворачивается в xz, ось Y не надо учитывать? Как итоговый вектор должен выглядеть? Занулить по оси? turret_vector.Angle_Between(Math.Vector3(vector3[0], 0, vector3[2])) Получается ерунда. И надо для вектора башни тоже какие-то манипуляции делать? @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted February 12, 2022 Share Posted February 12, 2022 тебе такое нужно? Blender 2022-02-12 12-14-17_Trim.mp4 тут короче надо нормировать точку относительно origin'ов башни и орудия, и залочить оси, по которым осуществлять поворот, вроде ничего хитрого @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted February 12, 2022 Author Share Posted February 12, 2022 21 минуту назад, SkepticalFox сказал: тебе такое нужно? Да. Подумал, что надо в 2d считать. Ведь поворот будет в одной плоскости. Получается, что нужен угол между двумя векторами, но два 2D вектора, у одного нет оси Y, у другого Z что-ли от изначальной точки прицеливания. И всё-равно ерунда получается. Игра любезно сообщает, что при координатах (-600.0, 11.7943, 35.0167999) должен быть результат (0.0630506500602, 0.027105294168) turretYaw и gunPitch. В радианах, так понимаю. У меня получается 1.62909153346. Координаты для башни оставил XZ. И ерунда получилась. Либо в координатах какая-то ошибка, хотя у меня в блендере собран танк и координаты совпадают. @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted February 12, 2022 Share Posted February 12, 2022 (edited) Ну да, тангаж для орудия и рыскание для башни, 2d самое настоящее Edited February 12, 2022 by SkepticalFox @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted February 13, 2022 Share Posted February 13, 2022 (edited) 9 часов назад, Dragon armor сказал: Как узнать угол между точкой и башней и между точкой и орудием? Если бы это был клиент игры, то я бы сделал так: turretDir = TurretPoint - TargetPoint turretDir.normalise() gunDir = gunPoint - TargetPoint gunDir.normalise() acosAngle = turretDir,dot(gunDir) 9 часов назад, Dragon armor сказал: Yaw для башни и Pitch для орудия. Напиши более конкретно ситуацию, что ты хочешь? Ты хочешь повернуть башню в сторону нужной точки или что? Edited February 13, 2022 by StranikS_Scan @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted February 13, 2022 Author Share Posted February 13, 2022 @StranikS_Scan Тут получается угол между башней и орудием. Мне надо другое. Вид сверху и сбоку. Точка прицеливания где-то. Для башни не нужна высота точки, нужны только координаты в плоскости XZ (в блендере система координат XYZ, в игре используется XZY). Для орудия не нужна координата X. Мне надо два угла, один между башней и точкой прицеливания, второй между орудием и точкой прицеливания. Вчера попробовал 2D сделать. Опять что-то непонятное выходит. Сейчас сделал в блендере точку прицеливания. А результат-то более-менее правдоподобен. Только должно быть немного меньше 90 (где-то 87), а получается чуть больше (где-то 93). @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted February 13, 2022 Share Posted February 13, 2022 (edited) В клиенте игры, если мне нужно узнать угол поворота по вертикальной оси между вектором направления корпуса моего танка и вектором на точку Point, то делаю вот так: playerPos = BigWorld.player().getOwnVehiclePosition() playerMatrix = Matrix(BigWorld.player().getOwnVehicleMatrix()) pointDir = Point - playerPos pointDir .normalise() yawAngle = pointDir.yaw - playerMatrix.yaw #Угол в радианах Если делать расчет относительно башни, то так будет Matrix(vehicle.appearance.compoundModel.node(TURRET)).yaw вместо playerMatrix.yaw В Блендер будет по аналогии с той лишь разницей, что надо учесть Y <----> Z Edited February 13, 2022 by StranikS_Scan @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted February 13, 2022 Author Share Posted February 13, 2022 @StranikS_Scan Получилось 86, только со знаком минус. Уже ближе похоже. И 2D не нужно, получается. Позже попробую посмотреть, как в игре это выглядеть будет. @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted February 13, 2022 Share Posted February 13, 2022 49 минут назад, Dragon armor сказал: @StranikS_Scan Получилось 86, только со знаком минус. Уже ближе похоже. И 2D не нужно, получается. Позже попробую посмотреть, как в игре это выглядеть будет. Вполне возможно, что тебе нужно playerMatrix.yaw - pointDir.yaw. Для твоих нужд. @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted February 13, 2022 Author Share Posted February 13, 2022 @StranikS_Scan Поменял координату X на положительную, знак сменился тоже. Так что всё нормально. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
DrWeb7_1 Posted February 14, 2022 Share Posted February 14, 2022 Беру подсказку «Помощь зала», скорее в целях понять, что происходит (да и тема ожила внезапно). Вот есть дерево исследований, в нём модули, которые надо исследовать. У клиента есть команда для сервера. # Python bytecode 2.7 (decompiled from Python 2.7) # Embedded file name: scripts/client/account_helpers/Stats.py, строки 113-124 def unlock(self, vehTypeCompDescr, unlockIdx, callback=None): if self.__ignore: if callback is not None: callback(AccountCommands.RES_NON_PLAYER) return else: if callback is not None: proxy = lambda requestID, resultID, errorStr, ext={}: callback(resultID) else: proxy = None self.__account._doCmdInt3(AccountCommands.CMD_UNLOCK, vehTypeCompDescr, unlockIdx, 0, proxy) return vehTypeCompDescr — тут понятно, танк, на котором мы что-то исследуем. А что за загадочная переменная unlockIdx? Ковырнул DAAPI, получил такие интересные данные: # Python bytecode 2.7 (decompiled from Python 2.7) # Embedded file name: scripts/client/gui/Scaleform/daapi/view/lobby/techtree/settings.py, строки 148-154 class UnlockProps(namedtuple('UnlockProps', 'parentID unlockIdx xpCost required')): def makeTuple(self): return (self.parentID, self.unlockIdx, self.xpCost, list(self.required)) # Вывод в python.log: 1809-0-1025-[1809, 3090] 1809-1-120-[1809, 2325] 1809-2-400-[1809, 2581, 2325] 1809-3-850-[1809, 2581, 2325, 2837] 1809-4-3600-[1809, 2839] 1809-5-5600-[1809, 1559, 2839] 1809-6-3400-[1809, 2579, 4372] 1809-7-12435-[1809, 2579, 4372] 1809-8-3800-[1809, 2579, 4372] ^ - это индекс элемента листа, обозначающий модуль, который надо исследовать Вопрос: что (или какая функция) в клиенте создаёт лист модулей для исследования, из которого достают индекс и посылают его серверу? @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted February 14, 2022 Share Posted February 14, 2022 16 minutes ago, DrWeb7_1 said: лист модулей для исследования scripts/item_defs/vehicles всмысле кто xml отсюда читает? вот вроде https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/1.16/source/res/scripts/common/items/vehicles.py 1 @ Quote Link to comment Short link Share on other sites More sharing options...
DrWeb7_1 Posted February 14, 2022 Share Posted February 14, 2022 5 минут назад, SkepticalFox сказал: всмысле кто xml отсюда читает? Осмелюсь предположить, что это items.vehicles._readUnlocks, в нём есть некоторые операции над листом, но мне кажется, что это не то и не туда. @ Quote Link to comment Short link Share on other sites More sharing options...
DrWeb7_1 Posted February 14, 2022 Share Posted February 14, 2022 22 минуты назад, DrWeb7_1 сказал: в нём есть некоторые операции над листом Возможно, это предположение имеет право на жизнь, unlocksDescrs выдаёт такую информацию: [(1940, 'vehicleChassis', 'T-34_mod_1943', 2), (1940, 'vehicleChassis', 'T-34_mod_1943', 2), (5000, 'vehicleEngine', 'V-2-34', 5), (5000, 'vehicleEngine', 'V-2-34', 5)] Опыт, тип предмета, его техническое имя и... какое-то requiredItems. Очередной загадочный индекс, который, по логике, должен обозначать требуемый для исследования предмет. Тогда вопрос: почему тут две ходовых Т-34 образца 1943 года? @ Quote Link to comment Short link Share on other sites More sharing options...
DrWeb7_1 Posted February 14, 2022 Share Posted February 14, 2022 Окей, доктору нужен доктор, и, видимо, это окулист (у меня -3.5 дпт, очки на -3 ношу, хотя рецепт на новые линзы уже на руках давно лежит). Всё оказалось проще, это атрибут unlocksDescrs для объекта items.vehicles.VehicleType. В случае с МС-1 последовательность такова: пушка 45 мм, АТ-1, Т-60, БТ-2, Т-26, СУ-18. Надеюсь, что очерёдность я понял правильно. [(40, 9220, 6147, 5892), (270, 5121, 5892, 6147, 9220), (270, 15361, 5892, 6147, 9220), (270, 1025, 5892, 6147, 9220), (270, 4609, 5892, 6147, 9220), (270, 3841, 5892, 6147, 9220)] Что ж, @SkepticalFox, спасибо за наводку. @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
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.