obuhhh Posted April 9, 2017 Share Posted April 9, 2017 Как перевести глобальную turnVelocity в относительную машины? TurnVelocity работает в глобальных значениях, как здесь в любом положении ТС: А мне нужно как здесь (относительно машины за часовой стрелкой например): Как? Может кто-то знает формулу для этого или есть функция, которая мне с этим поможет? При этом нужно не одну сторону лишь, а любую. Link to comment
Fabervox Posted April 9, 2017 Share Posted April 9, 2017 Я бы на вопрос ответил, нет. Без проблем можно пересчитать то, что можно сосчитать. У меня при одинаковом setTurn, несколько getTurn с таймерами, дают раз от раза отличные цифры, может быть я что-то делаю не так. Вот наверное сначала нужно создать условия повторяемости, ожидаемого результата. После будет возможно высчитать. Link to comment
Popular Post AfterAll14 Posted April 9, 2017 Popular Post Share Posted April 9, 2017 @Fabervox Тебе в политику надо Серьезно, у тебя нереальный скилл отвечать не отвечая по существу ничего @obuhhh Тебе надо составить вектор из полученных глобальных угловых скоростей и скалярно перемножить его на вектор оси машины (его можно получить из матрицы элемента). 4 Link to comment
Fabervox Posted April 9, 2017 Share Posted April 9, 2017 @AfterAll14, всему свое время) А вообще я имел ввиду, что пара setTurnVelocity и getTurnVelocity, работает мягко говоря странно. Например используя пару setElementVelocity и getElementVelocity, можно получать повторяющийся результат, и соответственно использовать результаты в каких-то расчетах. Но с turn я получал каждый раз разные результаты, очень разные. Link to comment
SDraw Posted April 14, 2017 Share Posted April 14, 2017 (edited) On 09.04.2017 at 17:06, AfterAll14 said: @Fabervox Тебе в политику надо Серьезно, у тебя нереальный скилл отвечать не отвечая по существу ничего @obuhhh Тебе надо составить вектор из полученных глобальных угловых скоростей и скалярно перемножить его на вектор оси машины (его можно получить из матрицы элемента). Скалярное произведение векторов есть число. Не поможет в решении.@obuhhh, получите вращение элемента машины, преобразуйте вращение в матрицу 4x4, найдите обратную к ней матрицу и умножьте результат на turnVelocity {x,y,z,0}. С преобразованием матриц не смогу помочь по причине другого типа системы координат в игре. Edited April 14, 2017 by SDraw Link to comment
AfterAll14 Posted April 14, 2017 Share Posted April 14, 2017 Just now, SDraw said: Скалярное произведение векторов есть число. Не поможет в решении. Лол. Ты не понял. Перемножаешь глобальный вектор на ось Х - получаешь локальную компоненту по оси Х. И так для каждой оси, если нужно. То что ты написал понять и сделать сами смогут единицы (им помощь не требуется). Just now, SDraw said: С преобразованием матриц не смогу помочь по причине другого типа системы координат в игре. Ахаха, самое сложное что требуется, чтобы сделать по твоему методу - сам ищи типа . Link to comment
Fabervox Posted April 14, 2017 Share Posted April 14, 2017 @AfterAll14, политика проще... Ну вот без матриц и на пальцах. Есть вращение по X, глобальное, то что дается обычной функции, если объект повернут на 90 градусов, то можно просто переставить куда там нужно на Y или Z, на 180 градусов, значит просто обратить знак перед числом, 270, обратить знак и на другую ось... Далее мы можем себе представить дугу, показывающую положение центра объекта при разных углах, от 0 до 90, вроде как получается что она демонстрирует плавный переход, следовательно и для вращения, он должен быть плавным. Если изменение пропорционально, то проблемы нет. Проблема возникнет лишь тогда, когда нужно трансформировать движение по нескольким осям сразу, учитывая и то что объект будет двигаться по этой дуге. Наверное проблема решаема, но честно говоря, мне не особо понятны единицы этого turnvelocity. Я могу легко посчитать, что из себя представляет обычный velocity, посредством getElementPosition и getTickCount/onClientRender. Как также посчитать turnvelocity я незнаю, и дело вовсе не в его глобальности, дело в том что я при одинаковых таймерах, заново создаваемым авто и стабильном фпс вижу весьма странную картинку, а getTurnVelocity показывает разные цифры. Можно пропорционально корректировать, но как понять какую вообще нужно цифру задавать? Быть может я делал что-то не так, желательно использовать некий реальный диапазон для turnVelocity, а не менять на порядок(0.1,1,10). @SDraw, или быть может я воочию увидел "другой тип координат"? Вроде бы конечно мне пофик, но если придется столкнуться с этим, научите заранее спасти свою психику. Link to comment
SDraw Posted April 14, 2017 Share Posted April 14, 2017 (edited) 31 minutes ago, Fabervox said: @SDraw, или быть может я воочию увидел "другой тип координат"? Вроде бы конечно мне пофик, но если придется столкнуться с этим, научите заранее спасти свою психику. Про другой тип системы координат имелось ввиду, что мне известны способы нахождения матриц вращений для OpenGL. В игре же даже система координат Direct3D изменена, что уже кидает в двойной пот. Что turnVelocity представляет собой - мне тоже неизвестно, даже потестировать нет возможности. Однако, есть предположения: - Если turnVelocity - нормированный вектор, определяющий направление поворота, то вариант описанный мною выше должен помочь (из данного предположения и делал вариант) - Если turnVelocity - изменение вращения элемента по осям, придётся модифицировать вариант: преобразовать turnVelocity и вращение элемента машины в кватернионы, умножить вращение turnVelocity на обратный кватернион элемента машины и привести полученный кватернион к Эйлеровым углам Edited April 14, 2017 by SDraw 1 Link to comment
obuhhh Posted April 14, 2017 Author Share Posted April 14, 2017 (edited) @Fabervox, я дошел к мнению, что 1 единица в turnVelocity это 1 поворот/сек. Не уверен, но на это похоже. Тем более в описании на вики написано о spin. Я вешал машину в воздух: на 50мс таймер, {0, 0, 0.05} велосити и {0, 0, 10} позиция. По хоткею обнуллял {0, 0, 0} ротацию и турн велосити. Применял различные значения для статичной машины и результат был одинаков, т.е. с функцией проблем нет. Проблема появляется с положением машины на дороге:по координате Y значение прыгает между 360 и 0, потому что это грачиные значения. Даже когда машина стоит значение прыгает и применение turnVelocity приводят к разным результатам. Поэтому проводить эксперименты на земле ни к чему полезному не приведут. На счет измененной системы координат. Наверное из-за этого не работают адекватно матрицы ротации в трехмерном мире.Надо просить разработчиков внести функцию для относительной turnVelocity, ибо они натворили, а нам разгребать. Edited April 14, 2017 by obuhhh 1 Link to comment
AfterAll14 Posted April 14, 2017 Share Posted April 14, 2017 @obuhhh тебе что конкретно надо сделать? Link to comment
obuhhh Posted April 14, 2017 Author Share Posted April 14, 2017 (edited) 13 minutes ago, AfterAll14 said: @obuhhh тебе что конкретно надо сделать? В конкретный момент дернуть машину за "веревку", которая может быть привязана к любой точке машины. Использовать хочу эту турнВелосити с обычной велосити. (дернуть != тащить) Edited April 14, 2017 by obuhhh Link to comment
AfterAll14 Posted April 14, 2017 Share Posted April 14, 2017 Так тебе глобальная скорость нужна будет. Ну по крайней мере я бы делал так. Link to comment
obuhhh Posted April 14, 2017 Author Share Posted April 14, 2017 Just now, AfterAll14 said: Так тебе глобальная скорость нужна будет. Ну по крайней мере я бы делал так. Если машина стоит неподвижно в нулевой ротации, то это подойдет, но не в другом случае. С этим я столкнулся. Link to comment
Fabervox Posted April 14, 2017 Share Posted April 14, 2017 @obuhhh, меня сейчас это не сильно волнует, но попробовав немного, столкнулся со странностями. Предельная скорость это в целом понятно, но по хорошему надо мерять и длительность импульса. Если все действительно что-то около 1об/с, тогда все просто, находим положение в третьей оси, тем самым получая коэфф. дифференциации локального turnVelocity между двумя другими осями для глобального velocity. Но вот если например мы берем rx и ry равные 45, то turnVelocity по z получит две половинки, правильно ли давать ей их, или нужно среднее/наибольшее/ещё какое-то, тут лучше эксперимент ответит. В не нулевой ротации, turnVelocity применял необходимый или прибавлял к имеющемуся? Link to comment
obuhhh Posted April 14, 2017 Author Share Posted April 14, 2017 (edited) 8 minutes ago, Fabervox said: В не нулевой ротации, turnVelocity применял необходимый или прибавлял к имеющемуся? И так, и так. пробовал. Суть результата в первом сообщении — вся машина в любом положении крутится по мировой оси. upd Результат такой: серые стрелки — нити в какую сторону и за какую часть дергают. Edited April 14, 2017 by obuhhh Link to comment
SDraw Posted April 14, 2017 Share Posted April 14, 2017 Ага, тут оказывается пытаются сделать крепления. Вещь таки не из легких, мои варианты сразу в топку идут. Link to comment
obuhhh Posted April 14, 2017 Author Share Posted April 14, 2017 8 minutes ago, SDraw said: Ага, тут оказывается пытаются сделать крепления. Вещь таки не из легких, мои варианты сразу в топку идут. Нет, машина тащиться за веревкой не будет. Мне надо саму физику этого толчка, остальное — коммерческая тайна. Link to comment
Other Languages Moderators Disinterpreter Posted April 14, 2017 Other Languages Moderators Share Posted April 14, 2017 (edited) 1 hour ago, obuhhh said: Нет, машина тащиться за веревкой не будет. Мне надо саму физику этого толчка, остальное — коммерческая тайна. Тогда решение вашего вопроса тоже - коммерческая тайна. Если хотите более подробнее узнать, приведите неявные(аналогичные), бытовые примеры. Edited April 14, 2017 by Disinterpreter Link to comment
Fabervox Posted April 15, 2017 Share Posted April 15, 2017 @obuhhh, самое простое, это сделать наработки в другом движке. Здесь какой ньюанс, пока направление вектора движения, далеко от направления объекта, оно приводит к вращению. По мере приближения оно приводит к большему движению уже объекта, и далее движение приводит к замедлению ротации. Это в идеальной ситуации. У всех тут есть какие-то маленькие или большие коммерческие и прочие тайны. И можно играть в игру, кто сможет выдать минимальный кусок от них. Причем выдано оно ведь будет не только участникам игры, но и вообще всем. А "интересант" то по большому счету один... Link to comment
obuhhh Posted April 18, 2017 Author Share Posted April 18, 2017 On 15.04.2017 at 18:05, Fabervox said: ... Ну ладно. Надо сделать джетпаки для машины. По одному с каждой стороны для авто, а можно и 4 — по углам. Вот. Но просто подкинуть это не то. Вдруг один двигатель повернется в другую сторону *сломается*. Тогда он будет работать не идеально вверх. Или вообще, будет только один, который тоже будет повернут в бок, и ты когда наждмешь, то тебя начнет в бок толкать. Вооот. Link to comment
AfterAll14 Posted April 18, 2017 Share Posted April 18, 2017 А почему джетпаки на веревках? Я себе не особо представляю такую конструкцию. Link to comment
obuhhh Posted April 18, 2017 Author Share Posted April 18, 2017 1 minute ago, AfterAll14 said: А почему джетпаки на веревках? Я себе не особо представляю такую конструкцию. Это была аналогия, чтобы не раскрывать все карты. Извините. Имелось в виду, что сама суть "толчка" что в ситуации с веревками, что с джетпаками — одинаковая. Вооот. Link to comment
AfterAll14 Posted April 18, 2017 Share Posted April 18, 2017 И в чем вопрос сейчас у тебя? Link to comment
obuhhh Posted April 18, 2017 Author Share Posted April 18, 2017 45 minutes ago, AfterAll14 said: И в чем вопрос сейчас у тебя? Их всё только больше. Теперь надо вектор разницы углов, между двумя векторами. Пытаюсь реализовать костылями.. Link to comment
AfterAll14 Posted April 18, 2017 Share Posted April 18, 2017 Нет такого понятия как "вектор разницы углов". Ты полез в тему где требуется наличие хотя бы базового уровня понимания динамики движения твердых тел (для изучения подразумевается наличие соответствующих знаний математического аппарата и базовых знаний хотя бы ньютоновской физики). Не вижу смысла что-то тебе объяснять т.к. тебе лучше почитать учебники чтобы получить какую-то базу. Сразу наперед скажу что возникнут проблемы с устойчивостью в полете, надо будет как-то стабилизировать, это скрипт не на одну неделю работы. Если нету столько времени и сил лучше сделать какую-нибудь фейковую систему с простеньким подъемом и перемещением через setElementPosition/setElementRotation. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now