2012-05-31 60 views
0

我在DirectCompute中爲教育寫了一個簡單的漫反射路徑跟蹤器。 DirectCompute的不允許遞歸函數,所以我需要弄清楚如何將這個遞歸語句轉換成一個循環:如何將這個遞歸函數解開爲一個循環?

intersectCode() { 

    // ... intersection code 

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

通用僞代碼或C例如將非常感激

+0

如果'(hit a object)'爲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; 

你可能需要調整它,因爲所有細節都不知道 - 例如,也許initObject不必堆棧?