Render.ru

expression в паренте

Олег Истомин

Активный участник
Рейтинг
11
#1
Например: Куб, к нему припарентена сфера . Для сферы - expression -типа: "pSphere1.translateZ=sin(pCube1.translateZ)"... При продвижении куба по оси Z все как нужно(типа передвигает ногу), но стоит повернуть направление движения Куба на 90градусов сфера останавливается (понятно, что объективно предмет уже не движется по Z) . Возможно ли привязать ось Z к Кубу,... или каким то образом заставить работать expression при движении Куба вперед, одной (лицевой в данный момент) стороной с любым градусом поворота?.... ТО ЕСТЬ, возможно ли с помощью expression создать несколько хаотично движущихся игрушек примитивно передвигающих ногами? По прямой они у меня "ходят", но пока не повернут.
 

Slavenin

Активный участник
Рейтинг
12
#2
что тебе мешает написать такую же экспрессию на оставшиеся две оси pSphere1.translateX=sin(pCube1.translateX) и pSphere1.translateY=sin(pCube1.translateY) либо попробуй свою сферу с кубом объединить в группу и уже для нее написать экспрессию(к сожалению проверить свои идеи в данный момент не могу)
 

Олег Истомин

Активный участник
Рейтинг
11
#3
Slavenin - сферы (условно ноги) должны двигаться всегда, строго вдоль тела (Куб), с определенной скоростью(для иллюзии шага,а не пробуксовки), потому при применении экспрешина сразу на все оси - просто исключается))) А вот с группами сейчас пробую, но не факт, что это выход.. в принципе по сцене может наглядней будет понять? (Куб, две сферы, exspression, все очень просто, могу выложить)
 

imha

Знаток
Рейтинг
20
#5
идея Slavenin правильная имхо. только вам нужно что-то типа:

pSphere1.translateZ=sin(pCube1.translateZ*1.1+pCube1.translateX*1.1+pCube1.translateY*1.1)
идея в суммарном смещении
(посмотрел вашу сцену). с вышеупомянутым экспрешном получается неказисто, но возможно получится это доработать

2 вариант
вам нужно из совокупности текущих dX dY dZ (смещений) координат составить формулу пройденнокго пути поотношению к предыдущему кадру. и исходя из этого позиционировать сферы.
более корректный имхо способ но громоздкий.

з.ы. Рационализатор))))
 

alex_alv

Активный участник
Рейтинг
11
#6
вариант 2 - не такой уж и громоздкий.

Просто добавьте к кубу 4 атрибута типа float:
put, lastx, lasty и lastz и навесьте на них следующий экспрешн:

vector $cur=<<pCube1.translateX,pCube1.translateY,pCube1.translateZ>>;
vector $dp=<<pCube1.lastx,pCube1.lasty,pCube1.lastz>>-$cur;
pCube1.lastx=$cur.x;
pCube1.lasty=$cur.y;
pCube1.lastz=$cur.z;
if(frame==1)pCube1.put=0;
else pCube1.put=pCube1.put+mag($dp);

Теперь привязывайте движение сфер не к pCube1.translateZ, а к pCube1.put

P.S. если не требуется привязка к движению по вертикали (не будет ходить по горкам), то вместо pCube1.translateY используйте 0
 

Олег Истомин

Активный участник
Рейтинг
11
#7
))) 1 вариант сходит на нет, при возвращении "объекта" на исходную (т.е. обратно в минус), 2-й вариант продумать не успел, так как обмозговывал второй вариант-предложение Slavenin. в принципе получилось, не дописывая экспрешин, просто всю "конструкцию" нужно "впарентить" в новый локатор, двигаем куб, а крутим локатор (теперь в любую сторону конструкция шагает как надо), только вот осталось найти , как записывать перемещение центра манипулятора (локатора, если это возможно), чтоб поворот можно было совершать вокруг левой или правой "ноги"..
Спасибо) за рационализатор))))
 

alex_alv

Активный участник
Рейтинг
11
#8
Если хочется, чтобы ходьба была и задом, нужно будет немного подправить экспрешн.

А еще правильнее, наоборот сделать
К атрибуту pos и к ориентации куба экспрешном привязать положение куба. И анимировать именно pos.
Тогда и с ногами не будет проблем и куб проще анимировать (при анимации pos, куб будет двигаться только по направлению вепред-назад, а не вбок)
 

alex_alv

Активный участник
Рейтинг
11
#9
Вот экспрешн, который наоборот атрибут put преобразует в tx, ty, tz (для его работы к кубу надо добавить атрибут put и lastput - оба типа float
и создать локатор locator1, в который будет сбрасываться позиция куба в первом кадре):

float $lp=pCube1.put-pCube1.lastput;
pCube1.lastput=pCube1.put;
vector $dp=<<0,0,$lp>>;
if(frame==1)
{
pCube1.translateX=locator1.translateX;
pCube1.translateY=locator1.translateY;
pCube1.translateZ=locator1.translateZ;
}else
{
$dp=rot($dp,<<1,0,0>>,deg_to_rad(pCube1.rotateX));
$dp=rot($dp,<<0,1,0>>,deg_to_rad(pCube1.rotateY));
$dp=rot($dp,<<0,0,1>>,deg_to_rad(pCube1.rotateZ));
pCube1.translateX+=$dp.x;
pCube1.translateY+=$dp.y;
pCube1.translateZ+=$dp.z;
}

Теперь анимировать надо put, rx, ry, rz. Подвязывать движение ног - к pCube1.put.
Движение задом будет нормальным.
 

Олег Истомин

Активный участник
Рейтинг
11
#10
Мда.... не все конечно понятно: выдает :Error: "$dp" is an undeclared variable. Буду искать расшифровку экспрешн команд.
 

alex_alv

Активный участник
Рейтинг
11
#11
В каком из двух экспрешнов?

Вообще, я оба экпрешна проверял у себя на Вашей сцене.
Error: "$dp" is an undeclared variable означает, что перед строкой, в которой ошибка, отсутствует описание переменной $dp.
В обоих экспрешнах переменная $dp описывается строкой типа vector $dp=<<...

И что конкретно не понятно? Вроде оба экспрешна не очень сложные :)

Первый экспрешн по значениям tx, ty и tz вычисляет пройденный кубом путь.

Второй экпрешн наоборот, по заданному пройденному пути, вычисляет tx, ty, tz куба (с учетом ориентации куба в пространстве в момент изменения пути)
 

Олег Истомин

Активный участник
Рейтинг
11
#13
Да,да!!! Блин, а для меня это не совсем просто (в процессе изучения), а тема да... можно кучу игрушек: машинки, вертолетики, повозки, тараканы( все, что скребет и вертится)... да что только фантазия позволит , для фона (ИМХО)
 

Олег Истомин

Активный участник
Рейтинг
11
#14
Все... не понятно....не получается... да...пытался тупо копировать -ошибки с переменными в обоих случаях, Пошел копать хелпы на эту тему (со словарем)...времени, конечно, придется поубивать немеряно.... не могу я просто так, не понимая, вслепую переписывать скрипты и экспрешны ((( ыыыы....
 
Сверху