var Vector = {};These are general-purpose functions that deal with vectors - in this case, three-dimensional vectors represented as objects in the form
{ x, y, z }Since we’re not using traditional object oriented techniques, these
functions take and return that sort of logic-less object, so you’ll see
add(a, b) rather than a.add(b).
var Vector = {};Vector.UP = { x: 0, y: 1, z: 0 };
Vector.ZERO = { x: 0, y: 0, z: 0 };
Vector.WHITE = { x: 255, y: 255, z: 255 };
Vector.ZEROcp = function() {
    return { x: 0, y: 0, z: 0 };
};is different than the rest of these since it takes two vectors but returns a single number value.
Vector.dotProduct = function(a, b) {
    return (a.x * b.x) + (a.y * b.y) + (a.z * b.z);
};generates a new vector that’s perpendicular to both of the vectors given.
Vector.crossProduct = function(a, b) {
    return {
        x: (a.y * b.z) - (a.z * b.y),
        y: (a.z * b.x) - (a.x * b.z),
        z: (a.x * b.y) - (a.y * b.x)
    };
};Enlongate or shrink a vector by a factor of t
Vector.scale = function(a, t) {
    return {
        x: a.x * t,
        y: a.y * t,
        z: a.z * t
    };
};Turn any vector into a vector that has a magnitude of 1.
If you consider that a unit sphere is a sphere with a radius of 1, a unit vector is like a vector from the center point (0, 0, 0) to any point on its surface.
Vector.unitVector = function(a) {
    return Vector.scale(a, 1 / Vector.length(a));
};Add two vectors to each other, by simply combining each of their components
Vector.add = function(a, b) {
    return {
        x: a.x + b.x,
        y: a.y + b.y,
        z: a.z + b.z
    };
};A version of add that adds three vectors at the same time. While
it’s possible to write a clever version of Vector.add that takes
any number of arguments, it’s not fast, so we’re keeping it simple and
just making two versions.
Vector.add3 = function(a, b, c) {
    return {
        x: a.x + b.x + c.x,
        y: a.y + b.y + c.y,
        z: a.z + b.z + c.z
    };
};Subtract one vector from another, by subtracting each component
Vector.subtract = function(a, b) {
    return {
        x: a.x - b.x,
        y: a.y - b.y,
        z: a.z - b.z
    };
};Length, or magnitude, measured by Euclidean norm
Vector.length = function(a) {
    return Math.sqrt(Vector.dotProduct(a, a));
};Given a vector a, which is a point in space, and a normal, which is
the angle the point hits a surface, returna  new vector that is reflect
off of that surface
Vector.reflectThrough = function(a, normal) {
    var d = Vector.scale(normal, Vector.dotProduct(a, normal));
    return Vector.subtract(Vector.scale(d, 2), a);
};