Render.ru
Поддержать

Для тех кто может писать скриптеночки

  • Автор темы Гость
  • Дата создания

Гость

Наверное такое можно сделать только скриптом.
По гроб жизни буду благодарен тому кто поможет.
Задача состоит в том, что есть некая изогнутая поверхность типа EditblePatch преобразованная в EditableMesh, соответственно она состоит из фейсов попарно соедененных в полигоны (Преобразование НУРВС поверхности дает треугольнае полигоны, это нам не нужно 🙂).
Фейсы входящие в полигон имеют некий угол между собой для лучшего сглаживания поверхности...
Нужно сделать так, чтобы фейсы переместились в одну плоскость, а гнулись между собой только полигоны (4-угольники). И в каждый полигон поверхности поместить бокс где одним из оснований бокса и будет этот выпрямленный полигон.
Может есть какой 3Д редактор, который работает с многоугольными полигонами и не гнет их по фейсам в изогнутой поверхности?
Сил моих больше нет подгонять эти кубики вручную..

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
Разработка собственного алгоритма тессиляции будет стоить очень не мало

Чем тебя неустраивает EditPoly + MeshSmooth ??

Гость

Дело в том, что Мах работает с треугольниками (треугольник согнуть нельзя), а полигон с четырьмя углами он гнет пополам по двум фейсам, а мне нужно чтобы эти треклятые четырехугольники оставались прямые...
Однако спасибо, я подозревал, что это невозможно сделать в Махе, а программы, которая использует в тессиляции многоугольники наверное просто не существует.

Гость

Это просьба, или предложение работы?

Гость

Вообще-то это была просьба помочь...
Но как я понял, это очень сложно -- не гнуть полигоны...

Гость

В эдит поли есть такая функция, как MakePlanar, но если ею выпрямить один полигон, то другие (соседние) опять расползаются.
Нельзя ли выпрямленный полигон(ы) зафризить как-нибудь, форма изогнутой поверхности меняется конечно при этом, но небольшие изменения в принципе допускаются.

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
Да так как ты предложил это сделать сложно тк все взаимосвязанно

>а программы, которая использует в тессиляции многоугольники наверное >просто не существует.

такой не встречал и чесно говоря сомневаюсь в возможности произвести таковую на пороизвольной поверхности даже если это возвожно
то должна получится очень причудливой формы и плотности (ни как не правильные прямоугольники)

единственное что можно предложить - это разбить поверхность по полигонам
и выровнять каждый в отдельности

PS
Для чего весь этот гимор ?
И для каких поверхностей ?

Гость

А как тогда отделить фейсы, но не как элементы, а как обьекты и применить к этим каждому из обьектов (не ко всем сразу, а по одному--циклом) модификатор екстрюд?

ПС Все это нужно для экспорта сложных поверхностей в игровой движок

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
obj = $
extrudeAmount = 10
-- ==========================================================
p = convertToPoly(obj)
fnum = p.EditablePoly.getNumFaces()
for i = 1 to fnum do
(
local fName = obj.name + " _Face" + (i as string)
polyOp.detachFaces p #(i) asNode😮n delete😮ff name:fName
)

for i = 1 to fnum do
(
local fName = obj.name + " _Face" + (i as string)
p = getNodeByName fName
p.EditablePoly.SetSelection #Face #{1}
p.EditablePoly.makePlanar #Face
p.extrusionType = 0
p.extrudeFaces extrudeAmount
)

Гость

Огромнейшее и искреннее спасибо за помощь и потраченное на меня время.
Еще чуть-чуть вашего внимания, если можно.

Скрипт спотыкается в нескольких местах. Может быть он написан под 5Мах, а я юзаю 4-й...
При его исполнении в окне Листенер пишется (я заменил выделенный обьект на box()):
____________________________________________________________________
$Box:Box01 @ [0.000000,0.000000,0.000000]
10
$Editable_Poly:Box01 @ [0.000000,0.000000,0.000000]
-- Unknown property: "getNumFaces" in <MixinInterface:EditablePoly>
OK
-- Error occurred in i loop
-- Frame:
-- i: 1
-- fname: "Box01 _Face1"
-- Unknown property: "SetSelection" in <MixinInterface:EditablePoly>
OK
____________________________________________________________________

Впрочем фейсы он отделяет, но больше с ними ничего не проискодит. Скрипт застревает на строке:
p.EditablePoly.SetSelection #Face #{1}

Я помучался с ним и получился почти модификатор для изготовления гранат РГ-5 🙂)
Написан он конечно на уровне уроков с Render.ru, но если вам не трудно помогите воткнуть в него выпрямление фейсов и может быть упростить по "грамматному".
____________________________________________________________________

obj = sphere(); obj.radius=32; obj.segs=12
select obj

converttomesh obj

p = convertToPoly(obj)
fnum = getNumFaces p

for i = 1 to fnum do
(
local fName = obj.name + " _Face" + (i as string)
polyOp.detachFaces p #(i) asNode😮n delete😮ff name:fName
)
delete obj

max select all
converttomesh $
aa = selection as array
for j in aa do
(
select j
subobjectlevel = 3
for i=1 to (getnumfaces j) do
(
select j.faces[#{1..(getnumfaces j)}]
extrudeface $ #{1..(getnumfaces j)} 2 0.1
subobjectlevel = 0
)
)

max select all
addModifier $ (Cap_Holes ())
converttomesh $
clearSelection()
_______________________________________________________________


И еще один вопрос. Почему не работает такой вариант c отделением треугольных фейсов для ЕдитейблМеш:

p = convertToMesh $
fnum = getNumFaces p

for i = 1 to fnum do
(
local fName = obj.name + " _Face" + (i as string)
MeshOp.detachFaces p #(i) asMesh😮n delete😮ff name:fName
)

И еще раз ОГРОМНОЕ, ОГРОМНОЕ СПАСИБО!!!

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
-- For Max 4.2
-- -------------------
obj = $
extrudeAmount = 10
-- ==========================================================
p = convertToPoly(obj)
fnum = (getPolygoncount p)[1]
for i = 1 to fnum do
(
local fName = obj.name + " _Face" + (i as string)
polyOp.detachFaces p #(i) asNode😮n delete😮ff name:fName
)

for i = 1 to fnum do
(
local fName = obj.name + " _Face" + (i as string)
p = getNodeByName fName
select p.faces[#{1}]
p.EditablePoly.makePlanar 3
p.extrusionType = 0
p.extrudeFaces extrudeAmount
)



--------------------------------------------------------------------------------------------------------------------
>И еще один вопрос. Почему не работает такой вариант c отделением треугольных фейсов для ЕдитейблМеш:

Потому что реализация функций для EditableMesh очень убогая
только в EditPoly более менее полно реализованны функции
дублирующие интерфейс

Гость

Огромнейшее Спасибо за конкретную помощь, все наконец-то заработало.