Class: Rubytracer::Material

Inherits:
Object
  • Object
show all
Defined in:
lib/rubytracer/material.rb

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Material

Returns a new instance of Material.



3
4
5
6
7
# File 'lib/rubytracer/material.rb', line 3

def initialize(options)
  @d_colour = options[:diffuse_colour]
  @s_colour = options[:specular_colour]
  @shininess = options[:shininess]
end

Instance Method Details

#diffuse(point, normal, scene, light) ⇒ Object



31
32
33
# 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) ⇒ Object



9
10
11
# 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) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
# 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) ⇒ Object



35
36
37
38
39
40
41
# 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) ⇒ Object



13
14
15
# File 'lib/rubytracer/material.rb', line 13

def specular_colour(point, normal)
  @s_colour || Colour.new(0,0,0)
end