Блин...Что-то не то с кодом, не работает... Может кто-нибудь, если не трудно, посмотреть что не так?
Смысл в том чтобы согнуть ленту по сплайну, но при этом не использовать параметр follow, так как при некоторых изгибах сплайна поворот звеньев ведет себя неадекватно. Первое звено ленты выходит из минигана под одним углом, а входит в ящик под углом 90 гр. (по локальной оси z) Для этого сделана первая часть кода(первый цикл), второй цикл должен назначить контроллер LookAt на звено, а как цель выбрать следующее и т.д.
ang = 1.125 --угол поворота для каждого звена
per = 0
for i = 1 to 80 do
(
per+=1.2
copy $
$.pos.controller.percent = per --положение нового звена
in coordsys local rotate $ (angleaxis ang [0,0,1]) --вращаем новое звено вдоль локальной оси z
)
max select all --выделяем все
arr = $ as array --заносим выделенное в массив
a = 1
b = arr[a]
c = LookAt_constraint () --создаем контроллер LookAt
clearSelection ()
for i in arr do
(
a+=1
c.appendTarget b 1.0 --добавляем цель к lookAt
i.rotation.controller = c --назначаем ранее созданный контроллер текущему звену
i.rotation.controller.StoUP_axis = 1
i.rotation.controller.upnode_world = off
i.rotation.controller.getUpNode = b
Я код не проверял, но первое то бросается в глаза это тут :
arr = $ as array --заносим выделенное в массив
a = 1
b = arr[a]
c = LookAt_constraint () --создаем контроллер LookAt
clearSelection ()
for i in arr do
(
a+=1
c.appendTarget b 1.0 --добавляем цель к lookAt
i.rotation.controller = c --назначаем ранее созданный контроллер текущему звену
i.rotation.controller.StoUP_axis = 1
i.rotation.controller.upnode_world = off
i.rotation.controller.getUpNode = b
)
переменная b всегда остаётся первым индексом массива так как она не переназначается, то что в цикле переменной а добавляются единички никак не влияет на то что уже записано выше по коду 🙂
for i = 1 to 80 do
(
per+=1.2
copy $
$.pos.controller.percent = per
in coordsys local rotate $ (angleaxis ang [0,0,1])
)
max select all
arr = $ as array
a = 1
c = LookAt_constraint ()
clearSelection ()
for i in arr do
(
a+=1
c.appendTarget arr[a] 1.0
i.rotation.controller = c
i.rotation.controller.StoUP_axis = 1
i.rotation.controller.upnode_world = off
i.rotation.controller.getUpNode = arr[a]
)
Получаю : -- Error occurred in i loop; filename: C:\Users\SCRAT1995\Documents\3dsMax\sceneassets\Rukav.ms; position: 748; line: 38
-- Frame:
-- i: $Rukav3
-- Unknown property: "getUpNode" in Controller:LookAt_Constraint
Что за бред?
Тут еще проблема: если у первого звена имя Rukav01, то после копирования, оно не остается вначале сплайна, а в конце, а вначале сплайна находится уже Rukav02. P.S. Копируемому звену назначен контроллер Path Constraint.
оно ругается на свойство getUpNode которого не существует, ну по крайней мере я его найти в хелпе или ещё где-то не могу) может имеется ввиду свойство pickUpNode ?
И ещё одно, сейчас у тебя в цикле пропускается первый индекс массива, то есть действия вешаются не на первый обьект, а на второй, так как в начале цикла переменная а (которая равна 1) сразу увеличивается на 1
Но если ты и это сделаешь то у тебя появятся проблемы с добавлением целей для LookAt , потому я бы сделал как то так в последнем твоём цикле
for i=2 to arr.count do
(
target= i-1
c = LookAt_constraint();
arr[i].rotation.controller = c
arr[i].rotation.controller.appendTarget arr[target] 1.0
arr[i].rotation.controller.StoUP_axis = 1
arr[i].rotation.controller.upnode_world = off
arr[i].rotation.controller.pickUpNode = arr[1]
i+=1
)
тут LookAt_constraint добавляется начиная со второго по счёту обьекта в массиве, а pickUpNode на самый первый
О, спасибо большое, заработало.🙂 Только почему-то, не назначается целевая ось, но это ладно поправлю. Да и, в предпоследней строки мне кажется так нужно:
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
scrat15
Смысл в том чтобы согнуть ленту по сплайну, но при этом не использовать параметр follow, так как при некоторых изгибах сплайна поворот звеньев ведет себя неадекватно. Первое звено ленты выходит из минигана под одним углом, а входит в ящик под углом 90 гр. (по локальной оси z) Для этого сделана первая часть кода(первый цикл), второй цикл должен назначить контроллер LookAt на звено, а как цель выбрать следующее и т.д.
ang = 1.125 --угол поворота для каждого звена
per = 0
for i = 1 to 80 do
(
per+=1.2
copy $
$.pos.controller.percent = per --положение нового звена
in coordsys local rotate $ (angleaxis ang [0,0,1]) --вращаем новое звено вдоль локальной оси z
)
max select all --выделяем все
arr = $ as array --заносим выделенное в массив
a = 1
b = arr[a]
c = LookAt_constraint () --создаем контроллер LookAt
clearSelection ()
for i in arr do
(
a+=1
c.appendTarget b 1.0 --добавляем цель к lookAt
i.rotation.controller = c --назначаем ранее созданный контроллер текущему звену
i.rotation.controller.StoUP_axis = 1
i.rotation.controller.upnode_world = off
i.rotation.controller.getUpNode = b
)
Goryhater
scrat15
Но так все-равно не работает.
ang = 1.125
per = 0
for i = 1 to 80 do
(
per+=1.2
copy $
$.pos.controller.percent = per
in coordsys local rotate $ (angleaxis ang [0,0,1])
)
max select all
arr = $ as array
a = 1
c = LookAt_constraint ()
clearSelection ()
for i in arr do
(
a+=1
c.appendTarget arr[a] 1.0
i.rotation.controller = c
i.rotation.controller.StoUP_axis = 1
i.rotation.controller.upnode_world = off
i.rotation.controller.getUpNode = arr[a]
)
Получаю : -- Error occurred in i loop; filename: C:\Users\SCRAT1995\Documents\3dsMax\sceneassets\Rukav.ms; position: 748; line: 38
-- Frame:
-- i: $Rukav3
-- Unknown property: "getUpNode" in Controller:LookAt_Constraint
Что за бред?
Тут еще проблема: если у первого звена имя Rukav01, то после копирования, оно не остается вначале сплайна, а в конце, а вначале сплайна находится уже Rukav02. P.S. Копируемому звену назначен контроллер Path Constraint.
scrat15
Goryhater
И ещё одно, сейчас у тебя в цикле пропускается первый индекс массива, то есть действия вешаются не на первый обьект, а на второй, так как в начале цикла переменная а (которая равна 1) сразу увеличивается на 1
scrat15
Goryhater
Goryhater
тут LookAt_constraint добавляется начиная со второго по счёту обьекта в массиве, а pickUpNode на самый первый
scrat15
arr.rotation.controller.pickUpNode = arr[target]