diff options
| author | James Barnett <noreply@jamesbarnett.xyz> | 2022-01-01 21:21:52 +0000 |
|---|---|---|
| committer | James Barnett <noreply@jamesbarnett.xyz> | 2022-01-01 21:21:52 +0000 |
| commit | 7ad1b7efabea1349107669a432e6c88305f8d825 (patch) | |
| tree | 8de34e4b3e20e4e8c0c01578ce0b0cfaa46cc6cf /src/Geometry.ts | |
| parent | dc5e815da04d7c377b3cb51558d6fe7b8e0fd7c0 (diff) | |
| download | js-raytracer-7ad1b7efabea1349107669a432e6c88305f8d825.tar.xz js-raytracer-7ad1b7efabea1349107669a432e6c88305f8d825.zip | |
Implement basic ray tracing
Diffstat (limited to 'src/Geometry.ts')
| -rw-r--r-- | src/Geometry.ts | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/Geometry.ts b/src/Geometry.ts new file mode 100644 index 0000000..4fcc11b --- /dev/null +++ b/src/Geometry.ts @@ -0,0 +1,31 @@ +import {Colour} from './Colour'; +import {Material} from './Material'; +import {Vector} from './Vector'; + +export class Sphere { + constructor( + readonly centerPoint: Vector, + readonly radius: number, + readonly material: Material + ) {} +} + +export class Plane { + constructor( + readonly yPos: number, + readonly width: number, // How far the plane extends into x/-x from 0 + readonly zStartPos: number, + readonly zEndPos: number, + readonly checkerboardScale: number + ) {} + + getMaterialAtPoint(x: number, z: number): Material { + let colour: Colour; + if ((Math.round(this.checkerboardScale * x) + Math.round(this.checkerboardScale * z)) & 1) { + colour = new Colour(15, 15, 15); + } else { + colour = new Colour(200, 200, 200); + } + return new Material(colour, 1, 0, 0, 0); + } +} |