Select Git revision
raytracing1.ts
Christoph-Anton Schwierz authored
raytracing1.ts 1.21 KiB
import Playground from "./playground";
import { vecDotProduct, vecMultiplyScalar, vecSubtract } from "./utils";
const pg = new Playground();
const sphere = {
position: [0, .5, -4], //C - Center of sphere
radius: 2
}
pg.visCamera(-1);
pg.gridXZ()
const o = [0, 0, 0]; //O - Origin
const co = vecSubtract(o, sphere.position) // O - C
const rsq = sphere.radius * sphere.radius;
const step = 1/8
for (let yCoord = -1; yCoord <= 1; yCoord += step) {
for (let xCoord = -1; xCoord <= 1; xCoord += step) {
const v = [xCoord, yCoord, -1]
const ov = vecSubtract(v, o); // V - O
pg.visVector(ov)
const a = vecDotProduct(ov, ov); // a = (V - O)*(V _ O)
const b = 2* vecDotProduct(ov, co); // b = 2 * ((V - O)*(O - C))
const c = vecDotProduct(co, co) - rsq; // c = ((O - C)*(O - C))-r^2
const discriminant = (b*b) - (4*a*c); // b^2 - 4*a*c
const t1 = (-b + Math.sqrt(discriminant)) / (2 * a)
const t2 = (-b - Math.sqrt(discriminant)) / (2 * a)
if (t1) {
pg.visPoint(vecMultiplyScalar(v, t1),{color:"red"});
}
if (t2) {
pg.visPoint(vecMultiplyScalar(v, t2),{color:"blue"});
}
}
}