function vec3(a,b,c){ this.a = a this.b = b this.c = c } vec3.prototype.add = function(v){ this.a += v.a this.b += v.b this.c += v.c return this } vec3.prototype.sub = function(v){ this.a -= v.a this.b -= v.b this.c -= v.c return this } vec3.prototype.clone = function(){ return new vec3(this.a, this.b, this.c) } // input: mat4 projection matrix vec3.prototype.apply_projection = function (m) { var x = this.a, y = this.b, z = this.c; var e = m.elements; var d = 1 / ( e[3] * x + e[7] * y + e[11] * z + e[15] ); // perspective divide this.x = ( e[0] * x + e[4] * y + e[8] * z + e[12] ) * d; this.y = ( e[1] * x + e[5] * y + e[9] * z + e[13] ) * d; this.z = ( e[2] * x + e[6] * y + e[10] * z + e[14] ) * d; return this; }