| // The ray tracer code in this file is written by Adam Burmister. It |
| // is available in its original form from: |
| // |
| // http://labs.flog.co.nz/raytracer/ |
| // |
| // Ported from the v8 benchmark suite by Google 2012. |
| part of ray_trace; |
| |
| class Ray { |
| final position; |
| final direction; |
| |
| Ray(this.position, this.direction); |
| String toString() { |
| return 'Ray [$position, $direction]'; |
| } |
| } |
| |
| class Camera { |
| final position; |
| final lookAt; |
| final up; |
| var equator, screen; |
| |
| Camera(this.position, this.lookAt, this.up) { |
| this.equator = lookAt.normalize().cross(this.up); |
| this.screen = this.position + this.lookAt; |
| } |
| |
| Ray getRay(double vx, double vy) { |
| var pos = |
| screen - (this.equator.multiplyScalar(vx) - this.up.multiplyScalar(vy)); |
| pos.y = pos.y * -1.0; |
| var dir = pos - this.position; |
| var ray = Ray(pos, dir.normalize()); |
| return ray; |
| } |
| |
| toString() { |
| return 'Camera []'; |
| } |
| } |
| |
| class Background { |
| final Color color; |
| final double ambience; |
| |
| Background(this.color, this.ambience); |
| } |
| |
| class Scene { |
| var camera; |
| var shapes; |
| var lights; |
| var background; |
| Scene() { |
| camera = Camera( |
| Vector(0.0, 0.0, -0.5), Vector(0.0, 0.0, 1.0), Vector(0.0, 1.0, 0.0)); |
| shapes = []; |
| lights = []; |
| background = Background(Color(0.0, 0.0, 0.5), 0.2); |
| } |
| } |