0

我正在 DirectCompute 中为教育编写一个简单的扩散路径跟踪器。DirectCompute不允许递归函数,所以我需要弄清楚如何将这个递归语句变成一个循环:

intersectCode() {

    // ... intersection code 

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

通用伪代码或 C 示例将不胜感激

4

1 回答 1

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 不必在堆栈中?

于 2012-05-31T21:17:36.883 回答