我正在DirectCompute中为教育编写一个简单的漫反射路径跟踪器。 DirectCompute不允许递归函数,所以我需要弄清楚如何将这个递归语句转换为循环:
intersectCode() {
// ... intersection code
if(hit an object)
return objectHit.diffuse * (intersectCode() + objectHit.emittance);
}
非常感谢通用伪代码或C示例
答案 0 :(得分: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可能不必在堆栈中?