1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

expression в паренте

Тема в разделе "Maya", создана пользователем Олег Истомин, 23 фев 2009.

Модераторы: Dark™, Skif
  1. Олег Истомин

    Олег Истомин Активный участник

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

    Slavenin Активный участник

    С нами с:
    22.06.2008
    Сообщения:
    264
    Симпатии:
    0
    Баллы:
    16
    что тебе мешает написать такую же экспрессию на оставшиеся две оси pSphere1.translateX=sin(pCube1.translateX) и pSphere1.translateY=sin(pCube1.translateY) либо попробуй свою сферу с кубом объединить в группу и уже для нее написать экспрессию(к сожалению проверить свои идеи в данный момент не могу)
     
  3. Олег Истомин

    Олег Истомин Активный участник

    С нами с:
    26.04.2007
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    11
    Slavenin - сферы (условно ноги) должны двигаться всегда, строго вдоль тела (Куб), с определенной скоростью(для иллюзии шага,а не пробуксовки), потому при применении экспрешина сразу на все оси - просто исключается))) А вот с группами сейчас пробую, но не факт, что это выход.. в принципе по сцене может наглядней будет понять? (Куб, две сферы, exspression, все очень просто, могу выложить)
     
  4. Олег Истомин

    Олег Истомин Активный участник

    С нами с:
    26.04.2007
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    11
    вот что пока получается: http://webfile.ru/2975554 (для Майи 2009)
     
  5. imha

    imha Знаток

    С нами с:
    04.07.2007
    Сообщения:
    166
    Симпатии:
    0
    Баллы:
    21
    идея Slavenin правильная имхо. только вам нужно что-то типа:

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

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

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

    alex_alv Активный участник

    С нами с:
    23.04.2008
    Сообщения:
    150
    Симпатии:
    0
    Баллы:
    14
    вариант 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
     
  7. Олег Истомин

    Олег Истомин Активный участник

    С нами с:
    26.04.2007
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    11
    ))) 1 вариант сходит на нет, при возвращении "объекта" на исходную (т.е. обратно в минус), 2-й вариант продумать не успел, так как обмозговывал второй вариант-предложение Slavenin. в принципе получилось, не дописывая экспрешин, просто всю "конструкцию" нужно "впарентить" в новый локатор, двигаем куб, а крутим локатор (теперь в любую сторону конструкция шагает как надо), только вот осталось найти , как записывать перемещение центра манипулятора (локатора, если это возможно), чтоб поворот можно было совершать вокруг левой или правой "ноги"..
    Спасибо) за рационализатор))))
     
  8. alex_alv

    alex_alv Активный участник

    С нами с:
    23.04.2008
    Сообщения:
    150
    Симпатии:
    0
    Баллы:
    14
    Если хочется, чтобы ходьба была и задом, нужно будет немного подправить экспрешн.

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

    alex_alv Активный участник

    С нами с:
    23.04.2008
    Сообщения:
    150
    Симпатии:
    0
    Баллы:
    14
    Вот экспрешн, который наоборот атрибут 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.
    Движение задом будет нормальным.
     
  10. Олег Истомин

    Олег Истомин Активный участник

    С нами с:
    26.04.2007
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    11
    Мда.... не все конечно понятно: выдает :Error: "$dp" is an undeclared variable. Буду искать расшифровку экспрешн команд.
     
  11. alex_alv

    alex_alv Активный участник

    С нами с:
    23.04.2008
    Сообщения:
    150
    Симпатии:
    0
    Баллы:
    14
    В каком из двух экспрешнов?

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

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

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

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

    imha Знаток

    С нами с:
    04.07.2007
    Сообщения:
    166
    Симпатии:
    0
    Баллы:
    21
    Да Алекц не поленился;) интересная тема. можно использовать!
     
  13. Олег Истомин

    Олег Истомин Активный участник

    С нами с:
    26.04.2007
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    11
    Да,да!!! Блин, а для меня это не совсем просто (в процессе изучения), а тема да... можно кучу игрушек: машинки, вертолетики, повозки, тараканы( все, что скребет и вертится)... да что только фантазия позволит , для фона (ИМХО)
     
  14. Олег Истомин

    Олег Истомин Активный участник

    С нами с:
    26.04.2007
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    11
    Все... не понятно....не получается... да...пытался тупо копировать -ошибки с переменными в обоих случаях, Пошел копать хелпы на эту тему (со словарем)...времени, конечно, придется поубивать немеряно.... не могу я просто так, не понимая, вслепую переписывать скрипты и экспрешны ((( ыыыы....
     
  15. alex_alv

    alex_alv Активный участник

    С нами с:
    23.04.2008
    Сообщения:
    150
    Симпатии:
    0
    Баллы:
    14
    Напишите на alex_alv@mail.ru, я выложу сцену, которая у меня получилась
     
Модераторы: Dark™, Skif

Поделиться этой страницей