UNPKG

hemisphere-sample

Version:

Uniform and cosinus hemisphere sampling using hammersley point set

23 lines (20 loc) 700 B
import hammersley from "hammersley"; const PI = Math.PI; export function hemisphereSampleUniform(i, N) { const hPoint = hammersley(i, N); const u = hPoint[0]; const v = hPoint[1]; const phi = v * 2.0 * PI; const cosTheta = 1.0 - u; const sinTheta = Math.sqrt(1.0 - cosTheta * cosTheta); return [Math.cos(phi) * sinTheta, Math.sin(phi) * sinTheta, cosTheta]; } export function hemisphereSampleCos(i, N) { const hPoint = hammersley(i, N); const u = hPoint[0]; const v = hPoint[1]; const phi = v * 2.0 * PI; const cosTheta = Math.sqrt(1.0 - u); const sinTheta = Math.sqrt(1.0 - cosTheta * cosTheta); return [Math.cos(phi) * sinTheta, Math.sin(phi) * sinTheta, cosTheta]; }