2012-05-31 6 views
0

Я пишу простой диффузный трассировщик пути в DirectCompute для обучения. DirectCompute не позволяет рекурсивные функции, так что мне нужно, чтобы выяснить, как превратить это рекурсивное заявление в петлю:Как развернуть эту рекурсивную функцию в цикле?

intersectCode() { 

    // ... intersection code 

    if(hit an object) 
     return objectHit.diffuse * (intersectCode() + objectHit.emittance); 
} 

Generic псевдо-код или пример C будет очень ценен

+0

Что он возвращает, если '(ударить объект)' false? –

+0

Если он пропускает каждый объект, он возвращает float3 (0,0,0) – user1043761

ответ

0
object = initialObject; 
objectStack = new ObjectStack(); 
do { 
    objectStack.push(object); 
    // get new intersected object as object 

} while (object); 

result = 0; 
while (object = objectStack.pop()) { 
    result = object.diffuse * (result + object.emittance); 
} 

return result; 

You может потребоваться изменить это, потому что все детали не известны - например, возможно, initObject не должен находиться в стеке?

Смежные вопросы