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 に答える