Render.ru

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

Castello2401

Пользователь сайта
Рейтинг
2
#1
Хочу реализовать простенький генератор 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
#2
попробовал так:
Код:
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
#3
Я не знаю. Попробуйте такой вариант:
Код:
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
#4
тут, может быть, скрипт просто не успевает применять MultiRes()
Я не знаю. Попробуйте такой вариант:
Код:
        addModifier lodObj (MultiRes());redrawViews()
Да, действительно, дело оказалось в работе модификатора который долго думает, поэтому вручную все работало. Спасибо.
 
Сверху