Mono フレームワークと C# に基づく Unity3D を使用しています。以下の関数は、スタック オーバーフローをスローします。これらがどこから来たのかわかりません。通常、最近ではこれは無限ループでのみ発生する傾向がありますが、私の場合はそうではありません。8x8x16 ボクセルでは問題なく動作しますが、16x16x32 ボクセルでクラッシュします。最初の関数が終了する前に 2 回目の関数が起動される可能性があると考えられるため、ロックを入れました。
int FloatingVoxelsFlood(int x, int y, int z, ref bool[] voxelsAttached) {
if (GetPixel(x, y, z).a > 0.5f) return 0;
int id = GetPixelId(x, y, z);
if (voxelsAttached[id]) return 0;
voxelsAttached[id] = true;
int count = 1;
int minx = x-1;
int maxx = x+1;
if (minx >= 0)
count += FloatingVoxelsFlood(minx, y, z, ref voxelsAttached);
if (maxx < volumeWidth)
count += FloatingVoxelsFlood(maxx, y, z, ref voxelsAttached);
int miny = y-1;
int maxy = y+1;
if (miny >= 0)
count += FloatingVoxelsFlood(x, miny, z, ref voxelsAttached);
if (maxy < volumeHeight)
count += FloatingVoxelsFlood(x, maxy, z, ref voxelsAttached);
int minz = z-1;
int maxz = z+1;
if (minz >= 0)
count += FloatingVoxelsFlood(x, y, minz, ref voxelsAttached);
if (maxz < volumeDepth)
count += FloatingVoxelsFlood(x, y, maxz, ref voxelsAttached);
return count;
}
voxelsAttached は、開始時にすべて false に設定されています。GetPixel().a は、ボクセルを使用する必要があるかどうかを返します。
このスタック オーバーフローを解決するにはどうすればよいですか?