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