Render.ru

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

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

Savin Denis

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

Чем тебя неустраивает EditPoly + MeshSmooth ??
 
#3
Дело в том, что Мах работает с треугольниками (треугольник согнуть нельзя), а полигон с четырьмя углами он гнет пополам по двум фейсам, а мне нужно чтобы эти треклятые четырехугольники оставались прямые...
Однако спасибо, я подозревал, что это невозможно сделать в Махе, а программы, которая использует в тессиляции многоугольники наверное просто не существует.
 
#5
Вообще-то это была просьба помочь...
Но как я понял, это очень сложно -- не гнуть полигоны...
 
#6
В эдит поли есть такая функция, как MakePlanar, но если ею выпрямить один полигон, то другие (соседние) опять расползаются.
Нельзя ли выпрямленный полигон(ы) зафризить как-нибудь, форма изогнутой поверхности меняется конечно при этом, но небольшие изменения в принципе допускаются.
 

Savin Denis

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

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

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

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

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

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

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#9
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:eek:n delete:eek: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
)
 
#10
Огромнейшее и искреннее спасибо за помощь и потраченное на меня время.
Еще чуть-чуть вашего внимания, если можно.

Скрипт спотыкается в нескольких местах. Может быть он написан под 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:eek:n delete:eek: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:eek:n delete:eek:ff name:fName
)

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

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#11
-- 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:eek:n delete:eek: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 более менее полно реализованны функции
дублирующие интерфейс
 
#12
Огромнейшее Спасибо за конкретную помощь, все наконец-то заработало.
 
Сверху