Quest3D - Русскоязычное сообщество

Quest3D => Физика => Тема начата: Droni от 29 Мая 2011, 16:55:34



Название: движение в направлении курсора
Отправлено: Droni от 29 Мая 2011, 16:55:34
Я переделал пример "NewtonCamera". там камера двигалась туда, куда ты посмотришь, а мне надо, чтобы объект(при нажатии на кнопку движения) двигался всегда в ту сторону, где находится мышка. При повороте мыши объект следит за ней. Подскажите, пожалуйста...


Название: Re: движение в направлении курсора
Отправлено: Sqwer от 29 Мая 2011, 19:18:50
да, всё  верно, продолжай  в том же духе.


Название: Re: движение в направлении курсора
Отправлено: Droni от 01 Июня 2011, 11:25:17
В общем, я всё реализовал, объект следит за мышкой, только никак не могу понять как сделать, чтобы он двигался в направлении мышки. Можете объяснить хотя бы в двух словах... плиииииииииз!!!


Название: Re: движение в направлении курсора
Отправлено: dfx от 01 Июня 2011, 19:19:09
К вектору позиции добавляй дельта-вектор * скорость * TC и объект будет двигаться в сторону указателя.
Незнаю насколько это оптимально, но дельта вектор можно найти вычитанием из спроэцированной на плоскость позиции курсора, позицию модели, а потом нормализовав получившийся вектор.

На самом деле, если нужно добиться результата как в стратегиях, т.е. объект еще и припятствия должен объезжать, то лучше сразу изучить пример с MotionPlanning...


Название: Re: движение в направлении курсора
Отправлено: Droni от 06 Июня 2011, 17:12:24
У меня возник еще вопрос с координатами курсора. Почему так получается, что его координаты в соседних четвертях разные???


Название: Re: движение в направлении курсора
Отправлено: dfx от 07 Июня 2011, 18:57:25
Droni
Видимо магия.
 
В квесте можно получить координаты в пространстве экрана и в пространстве вьюпорта. Отрицательные координаты получаются только в случае, когда используешь координаты вьюпорта и курсор за его пределами.

Видимо ошибка в коде. Но так как код никто не видит, то врядли что скажет по существу. Только догадки..

Координаты курсора переводил из экранных в мировые(3д)?


Название: Re: движение в направлении курсора
Отправлено: Droni от 09 Июня 2011, 15:35:16
Ну я брал "VectorOperator" и в нем выбирал "Mouse Intersect XY plane(matrix)" и таким образом получал координаты курсора.  Причем я прикреплял к мыши частицы и их видно только в верхней половине вьюпорта!


Название: Re: движение в направлении курсора
Отправлено: dfx от 09 Июня 2011, 17:12:35
Droni
Цитировать
Ну я брал "VectorOperator" и в нем выбирал "Mouse Intersect XY plane(matrix)" и таким образом получал координаты курсора.  Причем я прикреплял к мыши частицы и их видно только в верхней половине вьюпорта!

Т.е. спроэцировал координаты курсора на плоскость. Все верно. И отрицательные координаты в таком случае нормально. А как эта плоскость повернута, относительно камеры?

Для того, что бы понять что происходит, тебе надо создать 2 объекта - плоскость и, например, сферу. К плоскости подключай матрицу, которую использовал для проекции курсора, а для позиции сферы - вектор, который получил в результате. Потомом покрути все это в изометрии. Как увидишь что происходит с объектами визуально - все вопросы отпадут.


Название: Re: движение в направлении курсора
Отправлено: Droni от 12 Июня 2011, 10:59:07
Я все понял! Мне нужны координаты курсора не в плоскости XY, а в плоскости XZ. Можно это сделать при помощи VectorOperator???


Название: Re: движение в направлении курсора
Отправлено: dfx от 12 Июня 2011, 16:38:14
Цитировать
Я все понял! Мне нужны координаты курсора не в плоскости XY, а в плоскости XZ. Можно это сделать при помощи VectorOperator???
Просто повернуть твою плоскость так, как тебе надо, т.е. сделать эту плоскость паралельной плоскости XZ ;)
Поставь motion, вместо канала матрицы и подергай вектор  поворота.


Название: Re: движение в направлении курсора
Отправлено: Alteste от 12 Июня 2011, 17:08:06
Могу предложить поковырять тебе этот исходник


Название: Re: движение в направлении курсора
Отправлено: Ruslan от 12 Июня 2011, 20:52:36
 ;D


Название: Re: движение в направлении курсора
Отправлено: Droni от 13 Июня 2011, 17:23:04
Ну да)))

Вобщем, теперь курсор бегает по плоскости XZ. Вот как всё у меня получилось:


Название: Re: движение в направлении курсора
Отправлено: Droni от 14 Июня 2011, 14:57:36
А где бы можно было бы поподробней узнать о MotionPlanning? что он вообще из себя представляет? я к нему всё подключил, а он мне показывает вектор destination position.


Название: Re: движение в направлении курсора
Отправлено: Ruslan от 14 Июня 2011, 15:08:28
могу посоветовать в редакторе нажать F1 и в поле поиска забить MotionPlanning


Название: Re: движение в направлении курсора
Отправлено: Droni от 14 Июня 2011, 17:31:06
К вектору позиции добавляй дельта-вектор * скорость * TC и объект будет двигаться в сторону указателя.
Незнаю насколько это оптимально, но дельта вектор можно найти вычитанием из спроэцированной на плоскость позиции курсора, позицию модели, а потом нормализовав получившийся вектор.
dfx, я правильно собрал??? И что с этим сделать, или куда подсоединить, чтобы модель двигалась в направлении курсора??? я куда только не тыкал эту конструкцию((((((


Название: Re: движение в направлении курсора
Отправлено: dfx от 15 Июня 2011, 18:03:27
Цитировать
dfx, я правильно собрал??? И что с этим сделать, или куда подсоединить, чтобы модель двигалась в направлении курсора??? я куда только не тыкал эту конструкцию((((((

Сама последовательность вычислений правильная. Но невидно куда ты ее в итоге прикручиваешь.

Смотри вложение - там таже самая конструкция, что и у тебя, но объект движется в указанную точку.
пс. Коменты было лень проставлять, сори.


Название: Re: движение в направлении курсора
Отправлено: Droni от 17 Июня 2011, 16:05:44
Я разобрался с примером: в нем, в итоге, Position vector - это конечное положение 3d объекта. А проблема в том, что к newtonBody не подсоединишь его также к MatrixMotion. Мой newtonBody передвигается с помощью Set Speed (vector). И я не могу понять, как в такой ситуации задать направление двмжения newtonBody.


Название: Re: движение в направлении курсора
Отправлено: Ruslan от 17 Июня 2011, 18:26:43
Смотри команды, в канале Newton Body Command


Название: Re: движение в направлении курсора
Отправлено: dfx от 17 Июня 2011, 20:51:43
значит просто передавай дельту в сетспид. Должно работать. Я завтра посмотрю, что там с ньютоном.


Название: Re: движение в направлении курсора
Отправлено: Droni от 20 Июня 2011, 18:20:32
если передавать в  сет спид, то не работает. А если set/add force, то объект вначале двигается в нужном направлении, а потом, при изменении позиции мыши, ведет себя неодекватно(((


Название: Re: движение в направлении курсора
Отправлено: Ruslan от 20 Июня 2011, 19:48:04
1)  Что бы объект "парил" в воздухе, и не терся об ленд, ему можно назначить силу,  действующую вверх, обратную гравитации.
2)  Объект прежде чем двигать опять же это применить силу в нужном направлении, можно повернуть на относительный угол. (все это есть в Newton Body Command)
Угол между векторами можно узнать с помощью Dot product

Вес естественно имеет большое значение, так что нужно вектор сначала нормализовать, а уж затем умножать на некий коэффициент, который можно подобрать вручную.

Вариантов, как такое реализовать много, и каждый будет уместен в том или ином случае, здесь же исходных данных мало, что бы выбрать оптимальное решение.


Название: Re: движение в направлении курсора
Отправлено: dfx от 21 Июня 2011, 00:22:12
Цитировать
если передавать в  сет спид, то не работает. А если set/add force, то объект вначале двигается в нужном направлении, а потом, при изменении позиции мыши, ведет себя неодекватно(((

На данный момент у меня такой загруз, что поэксперементировать со сценой никак не могу выкроить время(

С физикой схема сложнее будет, чем просто добавление вектора -
1. Если нужна остановка объекта в указанной точке, то надо ставить условие, что бы объект стал снижать скорость заранее, что бы не проехать ее, либо применять противоположную силу, что бы его резко тормознуть, но это будет не естественно смотреться.
2. Когда меняешь позицию цели, объект будет заносить из-за инерции(если он, конечно, имеет массу), поэтому вектор движения, возможно, придется постоянно корректировать, либо делать так, что бы объект продолжал двигаться со старым направлением, но снизил скорость до 0, а только потом стал передвигаться в новую позицию.

Сможешь выложить тестовую сценку, где есть только то, что нужно для моделирования ситуации?


Название: Re: движение в направлении курсора
Отправлено: Droni от 21 Июня 2011, 17:04:24
Вобщем, я сделал почти то, что хотел. Только надо что - то сделать с инерцией- уж больно сильно заносит, ничего не могу поделать((( И у меня возник ещё вопросик :
 А реально сделать тоже самое, что и в стандартном примере "Pathfinding", только с ньютоновскими телами???


Название: Re: движение в направлении курсора
Отправлено: Ruslan от 22 Июня 2011, 00:05:35
не плохо получилось, что бы уменьшить инерцию, нужно как советовал dfx в процессе анализировать расстояние и в соответствии копенсировать прикладываемую силу.


Название: Re: движение в направлении курсора
Отправлено: dfx от 22 Июня 2011, 12:37:45
Посмотрел сценку. Мне инерция понравилась :) Немного сложности в управление добавляет.
Но, честно говоря, я немного по иному представлял то, чего нужно добиться. Тут получается, что нужно анализировать не расстояние, а скорость и ее направление относительно позиции цели. Если объект движется в противоположную сторону от цели, то надо прикладывть бОльшую силу, направленную в сторону цели.

Незнаю, что я сделал, но инерция заметно поубавилась ;D Смущает то, что скорость пришлось поднять в разы. Позже еще поэкперементирую.


Название: Re: движение в направлении курсора
Отправлено: Droni от 26 Июня 2011, 18:36:05
Всё, теперь работает ;). Инерции почти вообще нет,А скорость  вроде как можно вообще любую ставить, даже на маленькой отлично работает))))