aboutsummaryrefslogtreecommitdiff
path: root/rtiaw
diff options
context:
space:
mode:
authorNat Lasseter <user@4574.co.uk>2024-06-12 21:26:19 +0100
committerNat Lasseter <user@4574.co.uk>2024-06-12 21:26:19 +0100
commit51416f5dfac39b6ede8340b57b9bed4eb3edc646 (patch)
treefa840f778dd5a48bc915dd43609d5065b5e1d115 /rtiaw
parentdf7c4a808d691e1d927047bb86aa9738780e694d (diff)
Done Chapter 8
Diffstat (limited to 'rtiaw')
-rwxr-xr-xrtiaw70
1 files changed, 3 insertions, 67 deletions
diff --git a/rtiaw b/rtiaw
index 5fb7e5a..82e4303 100755
--- a/rtiaw
+++ b/rtiaw
@@ -1,79 +1,15 @@
#!/usr/bin/env ruby
-start = Time.now.to_f
-
$LOAD_PATH.unshift File.dirname(__FILE__) + '/lib'
require 'interval'
require 'vec3'
require 'ray'
require 'hittable'
+require 'camera'
-def ray_colour(ray, world)
- if rec = world.hit(ray, Interval.new(0, Float::INFINITY))
- return (Colour.new(1,1,1) + rec.normal) * 0.5
- end
-
- unit_dir = ray.direction.unit
- a = (unit_dir.y + 1) / 2
- Colour.new(1.0, 1.0, 1.0) * (1-a) + Colour.new(0.5, 0.7, 1.0) * a
-end
-
-# Define image
-width = 400
-aspect = 16.0 / 9
-max = 255
-
-# Calculate height
-height = (width / aspect).to_i
-height = height < 1 ? 1 : height
-
-# World
world = Hittables.new
world << Sphere.new(0,0,-1, 0.5)
world << Sphere.new(0,-100.5,-1, 100)
-# Camera
-c_focallength = 1.0
-c_centre = Point.new(0,0,0)
-
-# Viewport
-v_height = 2.0
-v_width = v_height * width.to_f / height
-v_u = Vec3.new(v_width, 0, 0)
-v_v = Vec3.new(0, -v_height, 0)
-
-# Pixel deltas
-pd_u = v_u / width
-pd_v = v_v / height
-
-# Upper left pixel
-v_upperleft = c_centre -
- Vec3.new(0, 0, c_focallength) -
- v_u / 2 -
- v_v / 2
-p_00loc = v_upperleft +
- (pd_u + pd_v) / 2
-
-puts <<-EOH
-P3
-#{width} #{height}
-#{max}
-EOH
-
-height.times do |row|
- $stderr.print "Scanlines remaining: %4d" % (height - row)
- width.times do |col|
- p_centre = p_00loc + (pd_u * col) + (pd_v * row)
- ray_dir = p_centre - c_centre
- ray = Ray.new(c_centre, ray_dir)
-
- p_colour = ray_colour(ray, world)
- puts p_colour.to_ppm
- end
- puts
-end
-
-finish = Time.now.to_f
-took = finish - start
-
-$stderr.puts "Done. Took %4.2f seconds. " % took
+camera = Camera.new(400, 16.0 / 9)
+camera.render(world)