blob: e05df23a4773d914083d23896afa13c9a8679ae8 [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;
abstract class Materials {
final gloss; // [0...infinity] 0 = matt
final transparency; // 0=opaque
final reflection; // [0...infinity] 0 = no reflection
var refraction = 0.50;
var hasTexture = false;
Materials(this.reflection, this.transparency, this.gloss);
Color getColor(num u, num v);
wrapUp(t) {
t = t % 2.0;
if (t < -1) t += 2.0;
if (t >= 1) t -= 2.0;
return t;
}
}
class Chessboard extends Materials {
var colorEven, colorOdd, density;
Chessboard(this.colorEven, this.colorOdd, reflection, transparency, gloss,
this.density)
: super(reflection, transparency, gloss) {
this.hasTexture = true;
}
Color getColor(num u, num v) {
var t = this.wrapUp(u * this.density) * this.wrapUp(v * this.density);
if (t < 0.0) {
return this.colorEven;
} else {
return this.colorOdd;
}
}
}
class Solid extends Materials {
var color;
Solid(this.color, reflection, refraction, transparency, gloss)
: super(reflection, transparency, gloss) {
this.hasTexture = false;
this.refraction = refraction;
}
Color getColor(num u, num v) {
return this.color;
}
}