text: /**
   * @author supereggbert / http://www.paulbrunt.co.uk/
   */
  
  THREE.Vector4 = function ( x, y, z, w ) {
  
  	this.x = x || 0;
  	this.y = y || 0;
  	this.z = z || 0;
  	this.w = w || 1;
  
  	this.set = function ( x, y, z, w ) {
  
  		this.x = x;
  		this.y = y;
  		this.z = z;
  		this.w = w;
  		return this;
  
  	};
  
  	this.copy = function ( v ) {
  
  		this.x = v.x;
  		this.y = v.y;
  		this.z = v.z;
  		this.w = v.w;
  		return this;
  
  	};
  
  	this.add = function ( v1, v2 ) {
  
  		this.x = v1.x + v2.x;
  		this.y = v1.y + v2.y;
  		this.z = v1.z + v2.z;
  		this.w = v1.w + v2.w;
  		return this;
  
  	};
  
  	this.addSelf = function ( v ) {
  
  		this.x += v.x;
  		this.y += v.y;
  		this.z += v.z;
  		this.w += v.w;
  		return this;
  
  	};
  
  	this.sub = function ( v1, v2 ) {
  
  		this.x = v1.x - v2.x;
  		this.y = v1.y - v2.y;
  		this.z = v1.z - v2.z;
  		this.w = v1.w - v2.w;
  		return this;
  
  	};
  
  	this.subSelf = function ( v ) {
  
  		this.x -= v.x;
  		this.y -= v.y;
  		this.z -= v.z;
  		this.w -= v.w;
  		return this;
  
  	};
  
  	this.multiplyScalar = function ( s ) {
  
  		this.x *= s;
  		this.y *= s;
  		this.z *= s;
  		this.w *= s;
  		return this;
  
  	};
  
  
  	this.clone = function () {
  
  		return new THREE.Vector4( this.x, this.y, this.z, this.w );
  
  	};
  
  	this.toString = function () {
  
  		return 'THREE.Vector4 (' + this.x + ', ' + this.y + ', ' + this.z + ', ' + this.w + ')';
  
  	};
  
  };
  