| // @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; |
| |
| class Color { |
| double red; |
| double green; |
| double blue; |
| |
| Color(this.red, this.green, this.blue); |
| |
| void limit() { |
| red = (red > 0.0) ? ((red > 1.0) ? 1.0 : red) : 0.0; |
| green = (green > 0.0) ? ((green > 1.0) ? 1.0 : green) : 0.0; |
| blue = (blue > 0.0) ? ((blue > 1.0) ? 1.0 : blue) : 0.0; |
| } |
| |
| Color operator +(Color c2) { |
| return Color(red + c2.red, green + c2.green, blue + c2.blue); |
| } |
| |
| Color addScalar(double s) { |
| var result = Color(red + s, green + s, blue + s); |
| result.limit(); |
| return result; |
| } |
| |
| Color operator *(Color c2) { |
| var result = Color(red * c2.red, green * c2.green, blue * c2.blue); |
| return result; |
| } |
| |
| Color multiplyScalar(double f) { |
| var result = Color(red * f, green * f, blue * f); |
| return result; |
| } |
| |
| Color blend(Color c2, double w) { |
| var result = multiplyScalar(1.0 - w) + c2.multiplyScalar(w); |
| return result; |
| } |
| |
| int brightness() { |
| var r = (red * 255).toInt(); |
| var g = (green * 255).toInt(); |
| var b = (blue * 255).toInt(); |
| return (r * 77 + g * 150 + b * 29) >> 8; |
| } |
| |
| @override |
| String toString() { |
| var r = (red * 255).toInt(); |
| var g = (green * 255).toInt(); |
| var b = (blue * 255).toInt(); |
| |
| return 'rgb($r,$g,$b)'; |
| } |
| } |