Search code examples
javaraytracing

Ray Tracing - traversing the tree


I wrote a ray-tracing program and everything seems to be functioning apart from the algorithm I use to traverse the ray tree which I'm not sure is correct. At every collision point, the program stores the colour of the object, its reflectiveness index and the light intensity at that point (specular and diffuse, ambient is a constant). Can someone please help me and explain to me how exactly I'm supposed to be combining the colours of the objects and the light intensities as I'm traversing the ray tree?


Solution

  • From Nvidia Developer Zone:

    surfaceColor = emissive + ambient + diffuse + specular

    Here,

    • emissive = Ke

      where:

      • Ke is the material's emissive color.
    • ambient = Ka x globalAmbient

      where:

      • Ka is the material's ambient reflectance and
      • globalAmbient is the color of the incoming ambient light.
    • diffuse = Kd x lightColor x max(N · L, 0)

      where:

      • Kd is the material's diffuse color,
      • lightColor is the color of the incoming diffuse light,
      • N is the normalized surface normal,
      • L is the normalized vector toward the light source, and
      • P is the point being shaded.
    • specular = Ks x lightColor x facing x (max(N · H, 0))^shininess

      where:

      • Ks is the material's specular color,
      • lightColor is the color of the incoming specular light,
      • N is the normalized surface normal,
      • V is the normalized vector toward the viewpoint,
      • L is the normalized vector toward the light source,
      • H is the normalized vector that is halfway between V and L,
      • P is the point being shaded, and
      • facing is 1 if N · L is greater than 0, and 0 otherwise.