blob: e9957411aa6487b7fc55d3b592d9e2db20bd801a [file] [log] [blame]
// 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 Light {
final position;
final color;
final intensity;
Light(this.position, this.color, [this.intensity = 10.0]);
}
// 'event' null means that we are benchmarking
void renderScene(event) {
var scene = new Scene();
scene.camera = new Camera(new Vector(0.0, 0.0, -15.0),
new Vector(-0.2, 0.0, 5.0), new Vector(0.0, 1.0, 0.0));
scene.background = new Background(new Color(0.5, 0.5, 0.5), 0.4);
var sphere = new Sphere(new Vector(-1.5, 1.5, 2.0), 1.5,
new Solid(new Color(0.0, 0.5, 0.5), 0.3, 0.0, 0.0, 2.0));
var sphere1 = new Sphere(new Vector(1.0, 0.25, 1.0), 0.5,
new Solid(new Color(0.9, 0.9, 0.9), 0.1, 0.0, 0.0, 1.5));
var plane = new Plane(
new Vector(0.1, 0.9, -0.5).normalize(),
1.2,
new Chessboard(new Color(1.0, 1.0, 1.0), new Color(0.0, 0.0, 0.0), 0.2,
0.0, 1.0, 0.7));
scene.shapes.add(plane);
scene.shapes.add(sphere);
scene.shapes.add(sphere1);
var light = new Light(new Vector(5.0, 10.0, -1.0), new Color(0.8, 0.8, 0.8));
var light1 =
new Light(new Vector(-3.0, 5.0, -15.0), new Color(0.8, 0.8, 0.8), 100.0);
scene.lights.add(light);
scene.lights.add(light1);
int imageWidth, imageHeight, pixelSize;
bool renderDiffuse, renderShadows, renderHighlights, renderReflections;
var canvas;
if (event == null) {
imageWidth = 100;
imageHeight = 100;
pixelSize = 5;
renderDiffuse = true;
renderShadows = true;
renderHighlights = true;
renderReflections = true;
canvas = null;
} else {
imageWidth =
int.parse((querySelector('#imageWidth') as InputElement).value);
imageHeight =
int.parse((querySelector('#imageHeight') as InputElement).value);
pixelSize = int.parse(
(querySelector('#pixelSize') as InputElement).value.split(',')[0]);
renderDiffuse =
(querySelector('#renderDiffuse') as CheckboxInputElement).checked;
renderShadows =
(querySelector('#renderShadows') as CheckboxInputElement).checked;
renderHighlights =
(querySelector('#renderHighlights') as CheckboxInputElement).checked;
renderReflections =
(querySelector('#renderReflections') as CheckboxInputElement).checked;
canvas = querySelector("#canvas");
}
int rayDepth = 2;
var raytracer = new Engine(
canvasWidth: imageWidth,
canvasHeight: imageHeight,
pixelWidth: pixelSize,
pixelHeight: pixelSize,
renderDiffuse: renderDiffuse,
renderShadows: renderShadows,
renderReflections: renderReflections,
renderHighlights: renderHighlights,
rayDepth: rayDepth);
raytracer.renderScene(scene, canvas);
}