J'ai un raytracer simple qui ne fonctionne que jusqu'à la première intersection. La scène semble correcte avec deux sources de lumière différentes, mais lorsque les deux lumières sont dans la scène, il y a des ombres sombres là où la zone éclairée par l'une se termine, même si elle se trouve au milieu d'une zone éclairée par l'autre source de lumière (particulièrement visible sur la boule verte). La transition entre la "zone éclairée par les deux sources lumineuses" et la "zone éclairée par une seule source lumineuse" semble être légèrement plus sombre que la "zone éclairée par une seule source lumineuse".
Le code dans lequel j'ajoute les effets de lumière est le suivant :
// 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];
}
}
Comment faire pour que ça ait l'air bien ?