diff options
| author | James Barnett <noreply@jamesbarnett.xyz> | 2025-07-26 11:17:10 +0100 |
|---|---|---|
| committer | James Barnett <noreply@jamesbarnett.xyz> | 2025-07-26 11:17:10 +0100 |
| commit | 10bfc58085c6ab7e62077a1a9b6a6d922fffb025 (patch) | |
| tree | 3e1d3ff39891c2c2408235c209566f4c51915859 /src/models/Geometry.ts | |
| parent | ebc500c522e7233fbc6037bce0569edf3a0b5136 (diff) | |
| download | js-raytracer-10bfc58085c6ab7e62077a1a9b6a6d922fffb025.tar.xz js-raytracer-10bfc58085c6ab7e62077a1a9b6a6d922fffb025.zip | |
Rework multithreaded rendering
Render worker tasks are now split into chunks rather than row blocks for better thread utilisation
Diffstat (limited to 'src/models/Geometry.ts')
| -rw-r--r-- | src/models/Geometry.ts | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/models/Geometry.ts b/src/models/Geometry.ts new file mode 100644 index 0000000..556c7ea --- /dev/null +++ b/src/models/Geometry.ts @@ -0,0 +1,49 @@ +import {Type} from 'class-transformer'; +import {Colour} from './Colour'; +import {Albedo, Material} from './Material'; +import {Vector} from './Vector'; + +export class Sphere { + @Type(() => Vector) + readonly centerPoint: Vector; + @Type(() => Material) + readonly material: Material; + constructor( + readonly radius: number, + centerPoint: Vector, + material: Material + ) { + this.centerPoint = centerPoint; + this.material = material; + } +} + +export class Plane { + @Type(() => Colour) + readonly checkerboardColour1: Colour; + @Type(() => Colour) + readonly checkerboardColour2: Colour; + 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, + checkerboardColour1: Colour, + checkerboardColour2: Colour + ) { + this.checkerboardColour1 = checkerboardColour1; + this.checkerboardColour2 = checkerboardColour2; + } + + getMaterialAtPoint(x: number, z: number): Material { + let colour: Colour; + // prettier-ignore + if ((Math.round(this.checkerboardScale * x) + Math.round(this.checkerboardScale * z)) & 1) { + colour = this.checkerboardColour1; + } else { + colour = this.checkerboardColour2; + } + return new Material(colour, new Albedo(1, 0, 0, 0), 0, 1); + } +} |