Render.ru

как сделать так, что бы цилиндр вращался по одной оси в зависимости от движения

Firestarter7382

Пользователь сайта
Рейтинг
2
#1
помогите пожалуйста сделать так, что бы цилиндр вращался по одной оси в зависимости от движения другого обекта, типа корпус и колёса . Пробовал через парамер виринг ничего хорошего не получается
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#2
Нужно конвертнуть в радианы.
Вот например так должен выглядеть эспрешен для колеса с учетом его радиуса:
Код:
(DegToRad  (360. * ( $Box01.pos.x/(2.0 * Pi * $Cylinder01.Radius))) )
 

Firestarter7382

Пользователь сайта
Рейтинг
2
#3
нтересно... ,плохо что я совсем ламак ,недавно начал изучать MAX и в скриптах совсем не шарю . Можно по подробнее ,куда и как его встявлять
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#4
У тебя в сцене должен быть цилиндр прилинкованый к коробке на манер колеса
Соединяеш с помощью Виринг параметр контроллер вращения оси цилинтра Y_Rotation c премещением коробки по одной из осей
Вставляеш это выражение в Виринг параметр в место выражения в окошке Y_Rotation
После этого если перемещять коробку, то вращение колеса должно точно соотвествовать премещению тележки.
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#5
По просбе развить тему с перемещением колеса:
Пример формуировки задачи:
Получить зависимость вращения цилиндра определенного радиуса от премещения по траектории, согласно пройденному расстоянию вдоль нее.
Траектория задается анимацией корпуса к которому прилинкованно колесо
Код:
global cyl_y
global prevTime
if cyl_y == undefined or prevTime == undefined do (cyl_y = 0; prevTime = currentTime)
d1 =  at time (prevTime) $Cylinder01.pos
d2 =  at time (currentTime) $Cylinder01.pos
d = distance d2 d1
c2 =  (DegToRad (360. * ( (d) /(2.0 * Pi * $Cylinder01.Radius))) )
cyl_y += c2
prevTime = currentTime
cyl_y
Недостатки:

-Не учитывается обратное движение
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#6
Еще вариант, примечательный тем что можно таскать машинку во вьюпорте:
Код:
global cyl_y
global prevPos
if cyl_y == undefined or prevPos == undefined do (cyl_y = 0; prevPos =  $Cylinder01.pos)
d = distance $Cylinder01.pos prevPos
prevPos  = $Cylinder01.pos
cyl_y += (DegToRad (360. * ( (d) /(2.0 * Pi * $Cylinder01.Radius))) )
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#7
Тем кого интерисует анимация транспортных средств с учетом физических настроек советую глянуть:

Craft Director Tools

 

Firestarter7382

Пользователь сайта
Рейтинг
2
#8
пасибо Денис ты просто гений !!! Надо бы купить литературку специализированную ,что бы разобраться по подробнее
 
Сверху