class Rubytracer::Material

Public Class Methods

new(options) click to toggle source
# File lib/rubytracer/material.rb, line 3
def initialize(options)
  @d_colour = options[:diffuse_colour]
  @s_colour = options[:specular_colour]
  @shininess = options[:shininess]
end

Public Instance Methods

diffuse(point, normal, scene, light) click to toggle source
# File lib/rubytracer/material.rb, line 31
def diffuse(point, normal, scene, light)
  self.diffuse_colour(point, normal) * light.diffuse(normal, point, scene)
end
diffuse_colour(point, normal) click to toggle source
# File lib/rubytracer/material.rb, line 9
def diffuse_colour(point, normal)
  @d_colour || Colour.new(0,0,0)
end
lit_colour(scene, normal, view_vector, point, n=0) click to toggle source
# File lib/rubytracer/material.rb, line 17
def lit_colour(scene, normal, view_vector, point, n=0)
  reflection = Colour.new(0,0,0)

  #reflection += self.reflection(
  #reflection += self.refraction(
  
  scene.lighting.each do |light|
    reflection += self.diffuse(point, normal, scene, light)
    reflection += self.specular(point, normal, scene, view_vector, light)
  end

  return reflection
end
specular(point, normal, scene, view_vector, light) click to toggle source
# File lib/rubytracer/material.rb, line 35
def specular(point, normal, scene, view_vector, light)
  if @shininess
    self.specular_colour(point, normal) * (light.specular(normal, view_vector, point, scene) ** @shininess)
  else
    Colour.new(0,0,0)
  end
end
specular_colour(point, normal) click to toggle source
# File lib/rubytracer/material.rb, line 13
def specular_colour(point, normal)
  @s_colour || Colour.new(0,0,0)
end