我有一个简单的光线跟踪器,只能在第一次相交时运行。场景中有两个不同的光源,看起来还不错,但当两个灯都出现在场景中时,其中一个光源照亮的区域结束后会变得很暗,即使在另一个光源照亮的区域中间(特别是在绿色球上最明显)。从“两个光源都照亮的区域”过渡到“只有一个光源照亮的区域”的过程似乎比“只有一个光源照亮的区域”略微暗一些。
我添加照明效果的代码如下:
如何使其看起来正确?
我添加照明效果的代码如下:
![Hosted by imgur.com](https://imgur.com/Eqi5J.png)
// 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];
}
}
如何使其看起来正确?