Render.ru

Follow вдоль кривой экспрешном - как?

HuziK

Активный участник
Рейтинг
8
#1
Всем привет! Есть объект, двигающийся вдоль кривой, нужно экспрешном прописать его вращение по оси движения (аналог Follow).
У меня вышло следующее:

float $lastX = `getAttr -t (frame-1) Copter_Cube2.translateX`;
float $lastY = `getAttr -t (frame-1) Copter_Cube2.translateY`;
float $lastZ = `getAttr -t (frame-1) Copter_Cube2.translateZ`;
vector $last = <<$lastX, 0, $lastZ>>;
print("last = " + $last + "\n");
// узнали положение объекта кадр назад

float $curX = `getAttr Copter_Cube2.translateX`;
float $curY = `getAttr Copter_Cube2.translateY`;
float $curZ = `getAttr Copter_Cube2.translateZ`;
vector $cur = <<$curX, 0, $curZ>>;
print(" cur = " + $cur + "\n");
// текущее положение объекта

vector $dir = $cur + $last;

// узнали направление, в котором переместился объект

Copter_Cube2.rotateY = atan2d($dir.x, $dir.z);
// вычисляем угол в градусах, вдоль направления движения

Проект майки 2015, если это поможет: https://yadi.sk/d/zPoUlJuHfb55o

Объект вроде бы поворачивает по кривой, но угол явно неверный. Кто разбирается в математике, подскажите пожалуйста, как решить эту задачу.
Спасибо!
 

dimusart

Пользователь сайта
Рейтинг
4
#2
1. ошибка в определении вектора $dir
2. так же лучше завести переменную под frame

float $frm = frame;
float $lastX = `getAttr -t ($frm-1) Copter_Cube2.translateX`;
float $lastY = `getAttr -t ($frm-1) Copter_Cube2.translateY`;
float $lastZ = `getAttr -t ($frm-1) Copter_Cube2.translateZ`;
vector $last = <<$lastX, 0, $lastZ>>;
print("last = " + $last + "\n");
// узнали положение объекта кадр назад

float $curX = `getAttr Copter_Cube2.translateX`;
float $curY = `getAttr Copter_Cube2.translateY`;
float $curZ = `getAttr Copter_Cube2.translateZ`;
vector $cur = <<$curX, 0, $curZ>>;
print(" cur = " + $cur + "\n");
// текущее положение объекта

vector $dir = $cur - $last;

// узнали направление, в котором переместился объект

Copter_Cube2.rotateY = atan2d($dir.x, $dir.z);
// вычисляем угол в градусах, вдоль направления движения
 
Симпатии: HuziK

HuziK

Активный участник
Рейтинг
8
#4
Всем спасибо за ответы!
 
Последнее редактирование:

HuziK

Активный участник
Рейтинг
8
#5
Один момент, кому интересно: этот экспрешн работает криво при анимации по кривой, а при анимации кейфреймами, работает, как надо.
 

Кирилл Клят

Активный участник
Рейтинг
17
#6
Уважаемый Skif, вопрос по вашему видео - когда я делаю по пути анимации , то объект немного криво идет по кривой. Т.е. сначала либо делает зигзаг в начале кривой, (где то 20ую часть всей кривой) , либо поворачивается на 180 градусов и потом уже ползет по ней нормально. Почему? я пробовал rebuild curve и прочее, все равно, в начале кривой объект себя ведет ненормально. Я это "исправил" просто заанимировав twist у объекта как надо, но все равно это неправильно как-то
 

Skif

Администратор 3D галереи
Команда форума
Рейтинг
579
#7
Уважаемый Skif, вопрос по вашему видео - когда я делаю по пути анимации , то объект немного криво идет по кривой. Т.е. сначала либо делает зигзаг в начале кривой, (где то 20ую часть всей кривой) , либо поворачивается на 180 градусов и потом уже ползет по ней нормально. Почему? я пробовал rebuild curve и прочее, все равно, в начале кривой объект себя ведет ненормально. Я это "исправил" просто заанимировав twist у объекта как надо, но все равно это неправильно как-то
это надо разбираться в конкретном случае. так с ходу не скажу.
 
Сверху