blob: 49324aa83405fd77667a08d9e79f05364b7ff368 [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(query('#imageWidth').value);
imageHeight = int.parse(query('#imageHeight').value);
pixelSize = int.parse(query('#pixelSize').value.split(',')[0]);
renderDiffuse = query('#renderDiffuse').checked;
renderShadows = query('#renderShadows').checked;
renderHighlights = query('#renderHighlights').checked;
renderReflections = query('#renderReflections').checked;
canvas = query("#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);
}