@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
46 lines (38 loc) • 1.13 kB
JavaScript
import { v3_dot } from "../../../../../core/geom/vec3/v3_dot.js";
/**
*
* @param {function} random
* @param {number[]} result
* @param {number} result_offset
* @param {number[]} normal
* @param {number} normal_offset
*/
export function random_in_hemisphere(
random,
result,
result_offset,
normal,
normal_offset
) {
const nx = normal[normal_offset + 0];
const ny = normal[normal_offset + 1];
const nz = normal[normal_offset + 2];
const phi = Math.PI * 2 * random();
const cosTheta = random() * 2 - 1;
const theta = Math.acos(cosTheta);
const sinTheta = Math.sin(theta);
//compute coordinates
const x = sinTheta * Math.cos(phi);
const y = sinTheta * Math.sin(phi);
const z = cosTheta;
if (v3_dot(x, y, z, nx, ny, nz) < 0) {
result[result_offset] = -x;
result[result_offset + 1] = -y;
result[result_offset + 2] = -z;
} else {
//write the result
result[result_offset] = x;
result[result_offset + 1] = y;
result[result_offset + 2] = z;
}
}