Я переделал пример "NewtonCamera". там камера двигалась туда, куда ты посмотришь, а мне надо, чтобы объект(при нажатии на кнопку движения) двигался всегда в ту сторону, где находится мышка. При повороте мыши объект следит за ней. Подскажите, пожалуйста...
да, всё верно, продолжай в том же духе.
В общем, я всё реализовал, объект следит за мышкой, только никак не могу понять как сделать, чтобы он двигался в направлении мышки. Можете объяснить хотя бы в двух словах... плиииииииииз!!!
К вектору позиции добавляй дельта-вектор * скорость * TC и объект будет двигаться в сторону указателя.
Незнаю насколько это оптимально, но дельта вектор можно найти вычитанием из спроэцированной на плоскость позиции курсора, позицию модели, а потом нормализовав получившийся вектор.
На самом деле, если нужно добиться результата как в стратегиях, т.е. объект еще и припятствия должен объезжать, то лучше сразу изучить пример с MotionPlanning...
У меня возник еще вопрос с координатами курсора. Почему так получается, что его координаты в соседних четвертях разные???
Droni
Видимо магия.
В квесте можно получить координаты в пространстве экрана и в пространстве вьюпорта. Отрицательные координаты получаются только в случае, когда используешь координаты вьюпорта и курсор за его пределами.
Видимо ошибка в коде. Но так как код никто не видит, то врядли что скажет по существу. Только догадки..
Координаты курсора переводил из экранных в мировые(3д)?
Ну я брал "VectorOperator" и в нем выбирал "Mouse Intersect XY plane(matrix)" и таким образом получал координаты курсора. Причем я прикреплял к мыши частицы и их видно только в верхней половине вьюпорта!
DroniЦитироватьНу я брал "VectorOperator" и в нем выбирал "Mouse Intersect XY plane(matrix)" и таким образом получал координаты курсора. Причем я прикреплял к мыши частицы и их видно только в верхней половине вьюпорта!
Т.е. спроэцировал координаты курсора на плоскость. Все верно. И отрицательные координаты в таком случае нормально. А как эта плоскость повернута, относительно камеры?
Для того, что бы понять что происходит, тебе надо создать 2 объекта - плоскость и, например, сферу. К плоскости подключай матрицу, которую использовал для проекции курсора, а для позиции сферы - вектор, который получил в результате. Потомом покрути все это в изометрии. Как увидишь что происходит с объектами визуально - все вопросы отпадут.
Я все понял! Мне нужны координаты курсора не в плоскости XY, а в плоскости XZ. Можно это сделать при помощи VectorOperator???
ЦитироватьЯ все понял! Мне нужны координаты курсора не в плоскости XY, а в плоскости XZ. Можно это сделать при помощи VectorOperator???
Просто повернуть твою плоскость так, как тебе надо, т.е. сделать эту плоскость паралельной плоскости XZ ;)
Поставь motion, вместо канала матрицы и подергай вектор поворота.
Могу предложить поковырять тебе этот исходник
;D
Ну да)))
Вобщем, теперь курсор бегает по плоскости XZ. Вот как всё у меня получилось:
А где бы можно было бы поподробней узнать о MotionPlanning? что он вообще из себя представляет? я к нему всё подключил, а он мне показывает вектор destination position.
могу посоветовать в редакторе нажать F1 и в поле поиска забить MotionPlanning
Цитата: dfx от 01 июня 2011, 20:19:09
К вектору позиции добавляй дельта-вектор * скорость * TC и объект будет двигаться в сторону указателя.
Незнаю насколько это оптимально, но дельта вектор можно найти вычитанием из спроэцированной на плоскость позиции курсора, позицию модели, а потом нормализовав получившийся вектор.
dfx, я правильно собрал??? И что с этим сделать, или куда подсоединить, чтобы модель двигалась в направлении курсора??? я куда только не тыкал эту конструкцию((((((
Цитироватьdfx, я правильно собрал??? И что с этим сделать, или куда подсоединить, чтобы модель двигалась в направлении курсора??? я куда только не тыкал эту конструкцию((((((
Сама последовательность вычислений правильная. Но невидно куда ты ее в итоге прикручиваешь.
Смотри вложение - там таже самая конструкция, что и у тебя, но объект движется в указанную точку.
пс. Коменты было лень проставлять, сори.
Я разобрался с примером: в нем, в итоге, Position vector - это конечное положение 3d объекта. А проблема в том, что к newtonBody не подсоединишь его также к MatrixMotion. Мой newtonBody передвигается с помощью Set Speed (vector). И я не могу понять, как в такой ситуации задать направление двмжения newtonBody.
Смотри команды, в канале Newton Body Command
значит просто передавай дельту в сетспид. Должно работать. Я завтра посмотрю, что там с ньютоном.
если передавать в сет спид, то не работает. А если set/add force, то объект вначале двигается в нужном направлении, а потом, при изменении позиции мыши, ведет себя неодекватно(((
1) Что бы объект "парил" в воздухе, и не терся об ленд, ему можно назначить силу, действующую вверх, обратную гравитации.
2) Объект прежде чем двигать опять же это применить силу в нужном направлении, можно повернуть на относительный угол. (все это есть в Newton Body Command)
Угол между векторами можно узнать с помощью Dot product
Вес естественно имеет большое значение, так что нужно вектор сначала нормализовать, а уж затем умножать на некий коэффициент, который можно подобрать вручную.
Вариантов, как такое реализовать много, и каждый будет уместен в том или ином случае, здесь же исходных данных мало, что бы выбрать оптимальное решение.
Цитироватьесли передавать в сет спид, то не работает. А если set/add force, то объект вначале двигается в нужном направлении, а потом, при изменении позиции мыши, ведет себя неодекватно(((
На данный момент у меня такой загруз, что поэксперементировать со сценой никак не могу выкроить время(
С физикой схема сложнее будет, чем просто добавление вектора -
1. Если нужна остановка объекта в указанной точке, то надо ставить условие, что бы объект стал снижать скорость заранее, что бы не проехать ее, либо применять противоположную силу, что бы его резко тормознуть, но это будет не естественно смотреться.
2. Когда меняешь позицию цели, объект будет заносить из-за инерции(если он, конечно, имеет массу), поэтому вектор движения, возможно, придется постоянно корректировать, либо делать так, что бы объект продолжал двигаться со старым направлением, но снизил скорость до 0, а только потом стал передвигаться в новую позицию.
Сможешь выложить тестовую сценку, где есть только то, что нужно для моделирования ситуации?
Вобщем, я сделал почти то, что хотел. Только надо что - то сделать с инерцией- уж больно сильно заносит, ничего не могу поделать((( И у меня возник ещё вопросик :
А реально сделать тоже самое, что и в стандартном примере "Pathfinding", только с ньютоновскими телами???
не плохо получилось, что бы уменьшить инерцию, нужно как советовал dfx в процессе анализировать расстояние и в соответствии копенсировать прикладываемую силу.
Посмотрел сценку. Мне инерция понравилась :) Немного сложности в управление добавляет.
Но, честно говоря, я немного по иному представлял то, чего нужно добиться. Тут получается, что нужно анализировать не расстояние, а скорость и ее направление относительно позиции цели. Если объект движется в противоположную сторону от цели, то надо прикладывть бОльшую силу, направленную в сторону цели.
Незнаю, что я сделал, но инерция заметно поубавилась ;D Смущает то, что скорость пришлось поднять в разы. Позже еще поэкперементирую.
Всё, теперь работает ;). Инерции почти вообще нет,А скорость вроде как можно вообще любую ставить, даже на маленькой отлично работает))))