Senpai Опубликовано 25 марта, 2019 Поделиться Опубликовано 25 марта, 2019 1 минуту назад, mumut сказал: Скрыть контент float Get3dDistance(float myCoordsX, float myCoordsY, float myCoordsZ, float enCoordsX, float enCoordsY, float enCoordsZ) { return sqrt(pow(double(enCoordsX - myCoordsX), 2.0) + pow(double(enCoordsY - myCoordsY), 2.0) + pow(double(enCoordsZ - myCoordsZ), 2.0)); } Длина вектора в трёхмерном пространстве. Две точки и у каждой по 3 координаты, ну тут в коде всё уже написано Ну, а Pow это возведение в степень , в данном случае в квадрат Ссылка на комментарий Поделиться на другие сайты Поделиться
mumut Опубликовано 25 марта, 2019 Автор Поделиться Опубликовано 25 марта, 2019 4 часа назад, Senpai сказал: Не думаю, что будет что-то подходящее. Тут лучше самому подумать. Вот 32750 это π . тогда 32750/π мы получаем какое-то число . если на него поделить число из игры, то получим значение в радианах Если 32750 это число пи тогда зачем 32750 делить на 32750 ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Senpai Опубликовано 25 марта, 2019 Поделиться Опубликовано 25 марта, 2019 (изменено) 37 минут назад, mumut сказал: Если 32750 это число пи тогда зачем 32750 делить на 32750 ? Возьмём число из игры. Обозначим его "K". K/π=F=32750/3,14=10424,6 это константа будет. F это хз, как обозначить, но по логике должно быть так.(это отношение половины круга в игровых значениях к половине круга в радианах.) Если прочитать из игры какое-то значение и разделить на F, то ты получишь угол в радианах. S -угол в радианах K/F=S А если взять угол в радианах и умножить на F ,то получишь игровые значения S*F=K Изменено 25 марта, 2019 пользователем Senpai 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 25 марта, 2019 Поделиться Опубликовано 25 марта, 2019 В 24.03.2019 в 17:57, mumut сказал: "от -32750 до +32750" а по Y "от -16385 до +16385" Вопрос эти значения игровые? Или ты их получаешь из своего кода? Ссылка на комментарий Поделиться на другие сайты Поделиться
Senpai Опубликовано 25 марта, 2019 Поделиться Опубликовано 25 марта, 2019 24 минуты назад, Garik66 сказал: Вопрос эти значения игровые? Товарищ говорил, что да Ссылка на комментарий Поделиться на другие сайты Поделиться
mumut Опубликовано 26 марта, 2019 Автор Поделиться Опубликовано 26 марта, 2019 10 часов назад, Garik66 сказал: Вопрос эти значения игровые? Да, это диапазон поворота камеры "от -32750 до +32750" это по X а это по Y "от -16385 до +16385" Ссылка на комментарий Поделиться на другие сайты Поделиться
mumut Опубликовано 26 марта, 2019 Автор Поделиться Опубликовано 26 марта, 2019 20 часов назад, Senpai сказал: Возьмём число из игры Можешь помочь решить мою проблему. Она состоит в том что камера не поворачивается по Y. По твоей формуле я сделал чучуть поменял функцию вот так: Спойлер void CalcAngle_Test(float *myCoords, float * enCoords, float *angles) { float delta[3] = { (myCoords[0] - enCoords[0]), (myCoords[1] - enCoords[1]), (myCoords[2] - enCoords[2]) }; float hyp = sqrt(delta[0] * delta[0] + delta[1] * delta[1]); angles[0] = (float)(asinf(delta[2] / hyp) * 5215.5f); // как я понял это значение записывается в Y поворот "16385/3.14" angles[1] = (float)(atanf(delta[1] / delta[0]) * 10427.8f); // а это значение записывается в X поворот "32750/3.14" if (delta[0] >= 0.0) { angles[1] += 32760.0f; } } Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 26 марта, 2019 Поделиться Опубликовано 26 марта, 2019 1 час назад, mumut сказал: мою проблему. Сам пишешь: В 25.03.2019 в 05:38, mumut сказал: Поворот камеры в игре типа 4 байт.Поэтому такие значения. Так сделал разработчик. При этом рассчитываешь во float angles[0] = (float)(asinf(delta[2] / hyp) * 5215.5f); // как я понял это значение записывается в Y поворот "16385/3.14" angles[1] = (float)(atanf(delta[1] / delta[0]) * 10427.8f); // а это значение записывается в X поворот "32750/3.14" тебе нужно сначала рассчитать углы в радианах и только потом умножать на коэффициенты для перевода в игровые (4-байтные) значения. Ссылка на комментарий Поделиться на другие сайты Поделиться
mumut Опубликовано 26 марта, 2019 Автор Поделиться Опубликовано 26 марта, 2019 2 минуты назад, Garik66 сказал: тебе нужно сначала рассчитать углы в радианах Так я не могу понять как найти и рассчитать этот самый угол на который надо повернуть камеру. 5 минут назад, Garik66 сказал: При этом рассчитываешь во float Да но потом я перевожу в 4 байта. Если бы я не переводил то скорее всего у меня прицел поворачивал в какую то не понятную сторону а у меня не поворачивает только по Y координате Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 26 марта, 2019 Поделиться Опубликовано 26 марта, 2019 6 минут назад, mumut сказал: Так я не могу понять как найти и рассчитать этот самый угол Нарисуй Спойлер и вспомни (загугли) тригонометрию. Ссылка на комментарий Поделиться на другие сайты Поделиться
Senpai Опубликовано 26 марта, 2019 Поделиться Опубликовано 26 марта, 2019 2 часа назад, mumut сказал: angles[0] = (float)(asinf(delta[2] / hyp) * 5215.5f); // как я понял это значение записывается в Y поворот "16385/3.14" angles[1] = (float)(atanf(delta[1] / delta[0]) * 10427.8f); // а это значение записывается в X поворот "32750/3.14" везде должно быть 10427.8f Ссылка на комментарий Поделиться на другие сайты Поделиться
mumut Опубликовано 26 марта, 2019 Автор Поделиться Опубликовано 26 марта, 2019 (изменено) 3 минуты назад, Senpai сказал: везде должно быть 10427.8f А почему, просто же диапазон Y равен от -16385 до +16385. Да даже когда я ставил 10427.8f ничего не изменялось вообще. Изменено 26 марта, 2019 пользователем mumut Ссылка на комментарий Поделиться на другие сайты Поделиться
Senpai Опубликовано 26 марта, 2019 Поделиться Опубликовано 26 марта, 2019 16 минут назад, mumut сказал: А почему, просто же диапазон Y равен от -16385 до +16385. Т.к. единица измерения та же. А значения записываешь, как 4 байта ?(читать тоже надо, как 4 байта) Ссылка на комментарий Поделиться на другие сайты Поделиться
mumut Опубликовано 26 марта, 2019 Автор Поделиться Опубликовано 26 марта, 2019 16 минут назад, Senpai сказал: (читать тоже надо, как 4 байта) Что читать ? координаты в типе float а поворот в типе 4 байта. Ссылка на комментарий Поделиться на другие сайты Поделиться
Senpai Опубликовано 26 марта, 2019 Поделиться Опубликовано 26 марта, 2019 1 минуту назад, mumut сказал: Что читать ? координаты в типе float а поворот в типе 4 байта. Я про углы говорю. Читаешь 4 байта, переводишь в float, делаешь вычисления ,а потом переводишь обратно и записываешь 4 байта. Ну ты понял ;D Ссылка на комментарий Поделиться на другие сайты Поделиться
mumut Опубликовано 26 марта, 2019 Автор Поделиться Опубликовано 26 марта, 2019 3 минуты назад, Senpai сказал: Я про углы говорю. Читаешь 4 байта Самое интересное что в проекте нет строчки прочтения поворота камеры. Ну ты понял ;D Ссылка на комментарий Поделиться на другие сайты Поделиться
Senpai Опубликовано 26 марта, 2019 Поделиться Опубликовано 26 марта, 2019 2 минуты назад, mumut сказал: Самое интересное что в проекте нет строчки прочтения поворота камеры. Я его не смотрел Ссылка на комментарий Поделиться на другие сайты Поделиться
mumut Опубликовано 26 марта, 2019 Автор Поделиться Опубликовано 26 марта, 2019 26 минут назад, Senpai сказал: Читаешь 4 байта, переводишь в float, делаешь вычисления ,а потом переводишь обратно и записываешь 4 байта. angles[0] = (float)(asinf(delta[2] / hyp) * 5215.5f); // как я понял это значение записывается в Y поворот "16385/3.14"angles[1] = (float)(atanf(delta[1] / delta[0]) * 10427.8f); // а это значение записывается в X поворот "32750/3.14" То есть в angles[0] и angles[1] значение которое надо добавить в текущему повороту а не записать в поворот камеры или нет ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Senpai Опубликовано 26 марта, 2019 Поделиться Опубликовано 26 марта, 2019 2 часа назад, mumut сказал: angles[0] = (float)(asinf(delta[2] / hyp) * 5215.5f); // как я понял это значение записывается в Y поворот "16385/3.14"angles[1] = (float)(atanf(delta[1] / delta[0]) * 10427.8f); // а это значение записывается в X поворот "32750/3.14" То есть в angles[0] и angles[1] значение которое надо добавить в текущему повороту а не записать в поворот камеры или нет ? Спойлер Ссылка на комментарий Поделиться на другие сайты Поделиться
mumut Опубликовано 27 марта, 2019 Автор Поделиться Опубликовано 27 марта, 2019 10 часов назад, Senpai сказал: 12 часов назад, mumut сказал: angles[0] = (float)(asinf(delta[2] / hyp) * 5215.5f); // как я понял это значение записывается в Y поворот "16385/3.14"angles[1] = (float)(atanf(delta[1] / delta[0]) * 10427.8f); // а это значение записывается в X поворот "32750/3.14" То есть в angles[0] и angles[1] значение которое надо добавить в текущему повороту а не записать в поворот камеры или нет ? Показать контент Прости что спросил просто я уже поплыл с этим аимботом. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения