レイ トレーサーの基礎を作成しました。シーンを描画するためのテスト関数を次に示します。
public void Trace(int start, int jump, Sphere testSphere)
{
for (int x = start; x < scene.SceneWidth; x += jump)
{
for (int y = 0; y < scene.SceneHeight; y++)
{
Ray fired = Ray.FireThroughPixel(scene, x, y);
if (testSphere.Intersects(fired))
sceneRenderer.SetPixel(x, y, Color.Red);
else sceneRenderer.SetPixel(x, y, Color.Black);
}
}
}
SetPixel は、色の 1 次元配列に値を設定するだけです。関数を直接呼び出すだけで通常どおり呼び出すと、一定の 55 fps で実行されます。私が行った場合:
Thread t1 = new Thread(() => Trace(0, 1, testSphere));
t1.Start();
t1.Join();
それは一定の50fpsで実行されますが、これは問題なく理解できますが、実行すると:
Thread t1 = new Thread(() => Trace(0, 2, testSphere));
Thread t2 = new Thread(() => Trace(1, 2, testSphere));
t1.Start();
t2.Start();
t1.Join();
t2.Join();
それはあらゆる場所で実行され、30 ~ 40 fps の間で急速に移動し、時にはその範囲から 50 まで、または 20 まで下がります。まったく一定ではありません。すべてを単一のスレッドで実行した場合よりも実行速度が遅いのはなぜですか? クアッドコア i5 2500k で実行しています。