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

Не работает цикл "while ... do"!

Castello2401

Пользователь сайта
Рейтинг
2
Хочу реализовать простенький генератор LOD' ов, написал такой скрипт:
fn GenerateLODs obj =
(
    baseObj = obj
    i = 1
    while baseObj.numfaces >= 300 do
    (
        lodObj = copy baseObj
        addModifier lodObj (MultiRes())
        lodObj.modifiers[#MultiRes].vertexPercent = 50
        lodObj.modifiers[#MultiRes].reqGenerate = true
        convertToMesh lodObj
        lodObj.parent = obj
        lodObj.name = "$lod" + (i as string) + " " + obj.name
   
        baseObj = lodObj
        i += 1
    )
)
В итоге получился бесконечный цикл!
Переменная baseObj.numfaces не изменяется и проверка в теле цикла каждый раз возвращает true. С точки зрения синтаксиса и логики все правильно и должно работать! Почему так?

Александр Якушев

Активный участник
Рейтинг
7
попробовал так:
fn GenerateLODs obj =
(
    baseObj = obj
    i = 1
    num = baseObj.numfaces
    while i < 5 do
    (
        lodObj = copy baseObj
        addModifier lodObj (MultiRes())
        lodObj.modifiers[#MultiRes].vertexPercent = 50
        lodObj.modifiers[#MultiRes].reqGenerate = true
        convertToMesh lodObj
        num = lodObj.numfaces
        lodObj.parent = obj
        lodObj.name = "$lod" + (i as string) + " " + obj.name
     
        baseObj = lodObj
        i += 1
        print num
    )
)
на сфере возвращает
GenerateLODs $
960
960
960
960
960
тут, может быть, скрипт просто не успевает применять MultiRes()

igorznag

Мастер
Рейтинг
103
Castello2401Почему так?
Я не знаю. Попробуйте такой вариант:
fn GenerateLODs obj =
(
    baseObj = obj
    i = 1
    while baseObj.numfaces >= 300 do
    (
        lodObj = copy baseObj
        addModifier lodObj (MultiRes());redrawViews()
        lodObj.modifiers[#MultiRes].vertexPercent = 50
        lodObj.modifiers[#MultiRes].reqGenerate = true
        convertToMesh lodObj
        lodObj.parent = obj
        lodObj.name = "$lod" + (i as string) + " " + obj.name
   
        baseObj = lodObj
        i += 1
    )
)

Castello2401

Пользователь сайта
Рейтинг
2
Александр Якушев
тут, может быть, скрипт просто не успевает применять MultiRes()
igorznagЯ не знаю. Попробуйте такой вариант:
        addModifier lodObj (MultiRes());redrawViews()
Да, действительно, дело оказалось в работе модификатора который долго думает, поэтому вручную все работало. Спасибо.