• Добро пожаловать на Quest3D - Русскоязычное сообщество.
 

Newton Physics: различные проблемы и их решения

Автор barmadjar, 23 июля 2009, 13:25:13

« назад - далее »

Ruslan

После того, как получил вектор, его нужно нормализовать, а затем умножить на коэффициент.

1) Normalize (vector)
2) Multiply value (vector, value)

kyard

Еще два вопроса:

1. При применении Add Force сила применяемая к объекту накапливается. Можно как то ограничить это накапливание силы?

2. Как заставить силу прекратить действовать на объект?

Конкретно:
есть шар к нему применяю силу по двум осям X,Y получается летит прямо и в верх, после падения шар продолжает двигаться до тех пор пока не застрянет в установленных рамках.

Вот пример:

Ruslan

#47
1) Set Force (vector) - постоянная сила.
2) Вызывать канал(Newton Body Command) под условием (if, ifElse).
Или второй вариант: vector=(0,0,0)

kyard

1. Я наверное не так выразился. Меня устраивает Add Force , но мне нужно как кто ограничить эту силу что бы она не была больше определенной. Например достигла 10 и перестала увеличиваться. Такое возможно?

2. Мысль про условия понял, но по оси Y значение у шара не меняется. Условие звучит примерно так: если шар на земле то силы на него перестают действовать. Я пытался к этому условию прикрепить ось Y, но т.к. она не меняется условие остается неизменным.

P.S. пытаюсь сделать что то похожее на выстрел из катапульты.

Ruslan

1) с помощью канала Newton Body Vector -> Linear Velocity, можно получить вектор линейной скорости объекта., и если он например больше 10, то не применять силу к этому объекту.
2) для того, что бы проверить на земле шар или нет (если земля плоская :) ) достаточно проверить положение по Y.
Если земля не плоская, то кури примеры стандартные:
Examples\Physics\14 - Contact Statistics.cgr
Examples\Physics\15 - Contact Behaviour.cgr

P.S. тоже как то хотел написать статью по Newton, и сделать рабочий пример "катапульта".

kyard

1. Newton Body Vector -> Linear Velocity не подходит т.к. движение идет четко по тем осям какие заданы с постоянной скоростью и если ее откл. то шар упадет резко вниз (я так думаю). Add Force подходит, но чем дольше ждешь перед вкл. физики тем сильнее будет приложенная  сила, а если нажать сразу воспроизведение физики, то сила будет маленькой(попробуй на моем примере воспроизводить физику, не повтором, а через стоп и жди разно время сам сможешь увидеть разницу).

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

Я согласен с тобой про Y, вкл. физику и шар начинает двигаться, но его положение относительно Y не меняется(я имею в виду данные которые подсоединены к матрице) они сохраняются первоначальными т.е. какие были до вкл. физики

Ruslan

#51
1) с помощью канала Newton Body Vector -> Linear Velocity ты узнаешь всего лишь скорость объекта(vector), при этом с помощью ValueOperator -> Get vector x (vector), можно получить отдельно значение либо X, либо Y, либо Z. Дальше используя эту информацию (скорость движения объекта, отдельно по каждой из осей!(x,y,z)), ты либо прикладываешь к объекту силу, либо не прикладываешь.

2) из примеров, которые я посоветовал, можно подсмотреть, как проверить столкновение объекта(сфера) с ландшафтом.

kyard

Цитата: Ruslan от 16 мая 2010, 17:27:14
1) с помощью канала Newton Body Vector -> Linear Velocity ты узнаешь всего лишь скорость объекта(vector), при этом с помощью ValueOperator -> Get vector x (vector), можно получить отдельно значение либо X, либо Y, либо Z. Дальше используя эту информацию (скорость движения объекта, отдельно по каждой из осей!(x,y,z)), ты либо прикладываешь к объекту силу, либо не прикладываешь.



Скорость я так и не понял как узнать, но зато с помощью этого вычислил Y и заставил шарик останавливаться.

Я наверное чего то не понимаю. Смотри Add Force дает силу в момент вкл. физики при этом сила накапливается и чем дольше мы не вкл. физику тем сильнее будет эта сила в момент вкл. физики.

Я правильно понимаю?

P.S. перевожу хелп через онлайн переводчик

Ruslan

#53
Не понимаю, зачем тебе накапливать силу?
накапливай не силу, а просто переменную (Value) а потом создай нужный тебе вектор для прикладывания силы, основываясь на значении переменной (Value) и ограничении.
На счет скорости:

kyard

Цитата: Ruslan от 16 мая 2010, 18:09:35
накапливай не силу, а просто переменную (Value) а потом создай нужный тебе вектор для прикладывания силы, основываясь на значении переменной (Value) и ограничении.

Че то я совсем запутался.

Можешь исправить?

Ruslan

#55
Распиши подробно, что должно происходить, я не вижу, где в твоем примере накапливается сила.. что вообще должно произойти со сферой?
ЦитироватьМеня устраивает Add Force , но мне нужно как кто ограничить эту силу что бы она не была больше определенной. Например достигла 10 и перестала увеличиваться. Такое возможно?
Ты прикладываешь силу Add Force и она, тут же в этом игровом цикле программы израсходуется.. она не будет аккумулироватся.. она возможно будет аккумулироватся, только если ты несколько раз за игровой цикл вызовешь эту команду, или в цикле For., но даже при этом она в текущем игровом цикле израсходуется, тоесть применится вся к объекту.

kyard

К шару должна применяться сила(синея точка), при чем управляемая сила, и лететь он должен по такой траектории (см. рис.; красные точки)

Ruslan

#57
R- Reset
Space - аккумулирование силы

kyard

Спасибо Ruslan!

P.S. сам бы я да такого не додумался.

Ruslan

#59
хм
поставил себе Newton SDK, скомпилил примеры..
теперь у меня глючит Ньютон в Квесте, при чем, переустановка Квеста не помогла..  :o

ред. Вобщем скомпилированное приложение нормально работает, только в полноэкранном режиме! во вьюпорте квеста не работает, а так же скомпилированное, запущенное в оконном режиме тоже не работает..
Что же это такое, и как с этим бороться.  ???