aboutsummaryrefslogtreecommitdiff
path: root/src/Geometry.ts
diff options
context:
space:
mode:
authorJames Barnett <noreply@jamesbarnett.xyz>2022-01-01 21:21:52 +0000
committerJames Barnett <noreply@jamesbarnett.xyz>2022-01-01 21:21:52 +0000
commit7ad1b7efabea1349107669a432e6c88305f8d825 (patch)
tree8de34e4b3e20e4e8c0c01578ce0b0cfaa46cc6cf /src/Geometry.ts
parentdc5e815da04d7c377b3cb51558d6fe7b8e0fd7c0 (diff)
downloadjs-raytracer-7ad1b7efabea1349107669a432e6c88305f8d825.tar.xz
js-raytracer-7ad1b7efabea1349107669a432e6c88305f8d825.zip
Implement basic ray tracing
Diffstat (limited to 'src/Geometry.ts')
-rw-r--r--src/Geometry.ts31
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);
+ }
+}