Class: Rubytracer::Material
- Inherits:
-
Object
- Object
- Rubytracer::Material
- Defined in:
- lib/rubytracer/material.rb
Instance Method Summary collapse
- #diffuse(point, normal, scene, light) ⇒ Object
- #diffuse_colour(point, normal) ⇒ Object
-
#initialize(options) ⇒ Material
constructor
A new instance of Material.
- #lit_colour(scene, normal, view_vector, point, n = 0) ⇒ Object
- #specular(point, normal, scene, view_vector, light) ⇒ Object
- #specular_colour(point, normal) ⇒ Object
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() @d_colour = [:diffuse_colour] @s_colour = [:specular_colour] @shininess = [: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 |