Skip to content
Snippets Groups Projects
Select Git revision
  • 0e30e3a770e285fc18d53a0b4ed68c111e6fa819
  • master default protected
2 results

raytracing1.ts

Blame
  • 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"});
            }
    
        }
    }