最初の交差点までしか機能しない単純なレイトレーサーがあります。シーンは 2 つの異なる光源で問題ないように見えますが、両方のライトがシーン内にある場合、一方の光源からの照明領域の中央にある場合でも、一方の照明領域が終了するところに暗い影ができます (特に、緑のボール)。「両方の光源に照らされた領域」から「1つの光源だけに照らされた領域」への移行は、「1つの光源だけによって照らされた領域」よりもわずかに暗いようです。
照明効果を追加するコードは次のとおりです。
// trace lights
for ( int l=0; l<primitives.count; l++) {
Primitive* p = [primitives objectAtIndex:l];
if (p.light)
{
Sphere * lightSource = (Sphere *)p;
// calculate diffuse shading
Vector3 *light = [[Vector3 alloc] init];
light.x = lightSource.centre.x - intersectionPoint.x;
light.y = lightSource.centre.y - intersectionPoint.y;
light.z = lightSource.centre.z - intersectionPoint.z;
[light normalize];
Vector3 * normal = [[primitiveThatWasHit getNormalAt:intersectionPoint] retain];
if (primitiveThatWasHit.material.diffuse > 0)
{
float illumination = DOT(normal, light);
if (illumination > 0)
{
float diff = illumination * primitiveThatWasHit.material.diffuse;
// add diffuse component to ray color
colour.red += diff * primitiveThatWasHit.material.colour.red * lightSource.material.colour.red;
colour.blue += diff * primitiveThatWasHit.material.colour.blue * lightSource.material.colour.blue;
colour.green += diff * primitiveThatWasHit.material.colour.green * lightSource.material.colour.green;
}
}
[normal release];
[light release];
}
}
どうすれば正しく見えるようになりますか?