
Dragon armor
User-
Content Count
404 -
Joined
-
Last visited
-
Days Won
3
Dragon armor last won the day on July 29 2021
Dragon armor had the most liked content!
Community Reputation
61 ⭐Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
-
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
Микроскопическая проблема и полный тупик. У меня не получается. Не понимаю, что надо сделать, чтобы получить вектор направления. Если у меня есть yaw и pitch, как из них сделать вектор направления? Или не так надо? А нужно из матрицы? Или это отдельный параметр? Но turret_yaw используется для получения координат крепления орудия. Что надо сделать, чтобы получить вектор направления? При этом, если отдельно отправлять yaw/pitch в gunAnglesPacked для остальной техники, башня вращается почти правильно (зацикливается на переходе 180 градусов, пока причину бага не искал). У меня не получится так сделать. Только из модели (либо xml файла) могу получить координаты. Правильно понимаю, что координаты техники - это глобальные координаты. А в xml находятся локальные. Соответственно, чтобы получить локальные (или это уже глобальные будут, если умножить на позицию техники?) координаты орудия и башни, делать надо так. turret_pos = vd.chassis.hullPosition + vd.hull.turretPositions[0] turret_matrix = Math.Matrix() turret_matrix.Set_Pos(turret_pos) turret_matrix.Rotate_Y(self.turret_yaw) turret_matrix.postMultiply(veh.matrix) gun_matrix = Math.Matrix() gun_matrix.Rotate_X(self.gun_pitch) gun_matrix.Set_Pos(vd.turrets[0][0].gunPosition) gun_matrix.postMultiply(turret_matrix) veh.matrix - это предполагается положение техники, пока что единичная матрица. Их не надо в данном шаге вычислений? hullPosition и turretPositions можно сложить? Они же не изменяются в локальной системе координат? Или надо перейти в локальную систему (точку прицеливания перевести в локальную) и считать углы там? Кто-нибудь объясните, что надо сделать. -
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
startPoint += player.vehicleTypeDescriptor.hull.turretPositions[0] + player.vehicleTypeDescriptor.turret.gunPosition А так можно? А то матрицы тут перемножаю, чтобы точку получить. Ясно. А зачем так? У клиента же есть скорость снаряда. Почему просто не передать направление? -
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
@ktulho Так направление выстрела или скорость? Как в одном векторе объединить две разных величины? У меня предположение, что это точка на ландшафте. Проверить не могу, cellapp пока что не может делать рейкаст (или как эта штука называется). И ландшафт при дампе уехал куда-то, поэтому не понятно, заканчивается точка на ландшафте или где-то ещё. А начальная точка примерно отсюда начинается. -
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
И так, возвращаюсь к тому, на чём застрял ещё в самом начале. Сервер присылает клиенту через функцию updateGunMarker некие вектора, назначение которых мне не ясно. shotPos, shotVec Реальный пример значений векторов. shotPos x = 43.00 y = 9.18 z = 412.46 shotVec x = -17.71 y = 20.38 z = -350.96 Из названия как бы всё понятно, но по коду, в котором используется, всё не однозначно. shotPos - либо конец орудия, либо начало точки стрельбы, которая где-то в башне находится. Ну пусть. А что второй вектор? Из updateGunMarker сразу идёт вызов setShotPosition. dirToTarget = predictedTargetPos - shotPos dirToTarget.normalise() shotDir = Math.Vector3(shotVec) shotDir.normalise() if shotDir.dot(dirToTarget) > 0.0: return dot - скалярное умножение векторов, тут что хотят проверить? Что вектор не нулевой? Ну ладно, идём в функцию __getGunMarkerPosition. А там уже не ясно мне ничего. Начало. def __getGunMarkerPosition(self, shotPos, shotVec, dispersionAngles): shotDescr = self.__avatar.getVehicleDescriptor().shot gravity = Math.Vector3(0.0, -shotDescr.gravity, 0.0) maxDist = shotDescr.maxDistance testStartPoint = shotPos testEndPoint = shotPos + shotVec * 10000.0 testVehicleID = self.getAttachedVehicleID() testEntities = ProjectileMover.getCollidableEntities((testVehicleID,), testStartPoint, testEndPoint) collideVehiclesAndStaticScene = ProjectileMover.collideVehiclesAndStaticScene collideWithSpaceBB = self.__avatar.arena.collideWithSpaceBB prevPos = shotPos prevVelocity = shotVec dt = 0.0 maxDistCheckFlag = False testEndPoint = shotPos + shotVec * 10000.0 - но вектор не единичный, его не нормализуют. prevVelocity = shotVec - так что такое shotVec? Что за скорость? -
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
@StranikS_Scan Поменял координату X на положительную, знак сменился тоже. Так что всё нормально. -
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
@StranikS_Scan Получилось 86, только со знаком минус. Уже ближе похоже. И 2D не нужно, получается. Позже попробую посмотреть, как в игре это выглядеть будет. -
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
@StranikS_Scan Тут получается угол между башней и орудием. Мне надо другое. Вид сверху и сбоку. Точка прицеливания где-то. Для башни не нужна высота точки, нужны только координаты в плоскости XZ (в блендере система координат XYZ, в игре используется XZY). Для орудия не нужна координата X. Мне надо два угла, один между башней и точкой прицеливания, второй между орудием и точкой прицеливания. Вчера попробовал 2D сделать. Опять что-то непонятное выходит. Сейчас сделал в блендере точку прицеливания. А результат-то более-менее правдоподобен. Только должно быть немного меньше 90 (где-то 87), а получается чуть больше (где-то 93). -
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
Да. Подумал, что надо в 2d считать. Ведь поворот будет в одной плоскости. Получается, что нужен угол между двумя векторами, но два 2D вектора, у одного нет оси Y, у другого Z что-ли от изначальной точки прицеливания. И всё-равно ерунда получается. Игра любезно сообщает, что при координатах (-600.0, 11.7943, 35.0167999) должен быть результат (0.0630506500602, 0.027105294168) turretYaw и gunPitch. В радианах, так понимаю. У меня получается 1.62909153346. Координаты для башни оставил XZ. И ерунда получилась. Либо в координатах какая-то ошибка, хотя у меня в блендере собран танк и координаты совпадают. -
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
Вот это мне и надо. Трудности с этим возникли непреодолимые. Башня поворачивается в xz, ось Y не надо учитывать? Как итоговый вектор должен выглядеть? Занулить по оси? turret_vector.Angle_Between(Math.Vector3(vector3[0], 0, vector3[2])) Получается ерунда. И надо для вектора башни тоже какие-то манипуляции делать? -
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
У меня есть какая-то функция по переводу матрицы в вектор поворота. Только это перевод в yaw, pitch, roll, мне же один параметр нужен. Yaw для башни и Pitch для орудия. Как угол между векторами узнать - легко. Для меня не понятно, как угол для башни и орудия найти. Повернуть надо по одной оси для башни и орудия. Вот эти углы надо найти. -
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
У меня сейчас только положение башни и орудия. Матрица будет позже, кватернион не нужен здесь, поворот вокруг одной оси только. Как мне угол узнать, на какой нужно повернуть башню и орудие? Это какой столбец матрицы? Или как его получить, если это не столбец? -
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
@SkepticalFox Будет вектор направления. А что с ним делать дальше? -
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
@SkepticalFox Формула, нужна формула. Нормализовать вектора? Что отнормировать? -
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
Опять настало время задавать вопросы. Проблемы мелкие, а решить их не могу. В 3d совсем не понимаю. Есть башня и орудие. Есть их положение в виде векторов. Есть точка, на которую орудие должно быть направлено. Как узнать угол между точкой и башней и между точкой и орудием? Просто угол между векторами не даст нужного результата, потому что и башня, и орудие поворачиваются в одной плоскости (каждый в своей). К примеру, координаты. Башня 0.000000, 1.382792, -1.968760 Орудие 0.000000, 2.807242, -2.682675 Точка наведения -600.0, 11.7943, 35.0167999 Начальное положение танка в нулевых координатах. Правильно понимаю, что в данном случае можно не переводить координаты в локальные для танка? -
Мод "Эмулятор сервера World of Tanks".
Dragon armor replied to Dragon armor's topic in Modding general discussion
Тогда вопрос отпадает сам собой. У меня выбор си был вызван тем, что мне нравится этот язык. Но это было, не в полной мере, но несколько ошибочно. Хотя бы с++ надо, надоедает базовые вещи реализовывать самому (типа контейнеров, векторов и прочее, что есть уже реализовано в стандартной библиотеке). Зато в нём всё просто и понятно, в отличие от с++. Только это немножко, слегка так, тяжеловато сделать. Там есть сетевой протокол свой собственный с реализацией (утрированно) TCP на UDP. Контроль целостности, ретрансмитты, шифрование. Его надо сделать. На питоне. А потом надо в дизассемблере подсмотреть, что клиент ожидает от сервера и повторить у себя.