瀏覽代碼

Merge branch 'dev' into layers-example

aardgoose 6 年之前
父節點
當前提交
db4012bc38
共有 100 個文件被更改,包括 11245 次插入1177 次删除
  1. 424 401
      build/three.js
  2. 364 364
      build/three.min.js
  3. 424 401
      build/three.module.js
  4. 0 11
      docs/api/en/renderers/WebGLRenderer.html
  5. 46 0
      docs/api/zh/Polyfills.html
  6. 48 0
      docs/api/zh/Template.html
  7. 362 0
      docs/api/zh/animation/AnimationAction.html
  8. 141 0
      docs/api/zh/animation/AnimationClip.html
  9. 110 0
      docs/api/zh/animation/AnimationMixer.html
  10. 85 0
      docs/api/zh/animation/AnimationObjectGroup.html
  11. 57 0
      docs/api/zh/animation/AnimationUtils.html
  12. 264 0
      docs/api/zh/animation/KeyframeTrack.html
  13. 131 0
      docs/api/zh/animation/PropertyBinding.html
  14. 98 0
      docs/api/zh/animation/PropertyMixer.html
  15. 78 0
      docs/api/zh/animation/tracks/BooleanKeyframeTrack.html
  16. 62 0
      docs/api/zh/animation/tracks/ColorKeyframeTrack.html
  17. 62 0
      docs/api/zh/animation/tracks/NumberKeyframeTrack.html
  18. 73 0
      docs/api/zh/animation/tracks/QuaternionKeyframeTrack.html
  19. 81 0
      docs/api/zh/animation/tracks/StringKeyframeTrack.html
  20. 61 0
      docs/api/zh/animation/tracks/VectorKeyframeTrack.html
  21. 212 0
      docs/api/zh/audio/Audio.html
  22. 99 0
      docs/api/zh/audio/AudioAnalyser.html
  23. 42 0
      docs/api/zh/audio/AudioContext.html
  24. 108 0
      docs/api/zh/audio/AudioListener.html
  25. 135 0
      docs/api/zh/audio/PositionalAudio.html
  26. 47 0
      docs/api/zh/cameras/ArrayCamera.html
  27. 87 0
      docs/api/zh/cameras/Camera.html
  28. 89 0
      docs/api/zh/cameras/CubeCamera.html
  29. 144 0
      docs/api/zh/cameras/OrthographicCamera.html
  30. 204 0
      docs/api/zh/cameras/PerspectiveCamera.html
  31. 67 0
      docs/api/zh/cameras/StereoCamera.html
  32. 39 0
      docs/api/zh/constants/Animation.html
  33. 37 0
      docs/api/zh/constants/Core.html
  34. 63 0
      docs/api/zh/constants/CustomBlendingEquations.html
  35. 83 0
      docs/api/zh/constants/DrawModes.html
  36. 101 0
      docs/api/zh/constants/Materials.html
  37. 76 0
      docs/api/zh/constants/Renderer.html
  38. 268 0
      docs/api/zh/constants/Textures.html
  39. 215 0
      docs/api/zh/core/BufferAttribute.html
  40. 362 0
      docs/api/zh/core/BufferGeometry.html
  41. 87 0
      docs/api/zh/core/Clock.html
  42. 108 0
      docs/api/zh/core/DirectGeometry.html
  43. 100 0
      docs/api/zh/core/EventDispatcher.html
  44. 134 0
      docs/api/zh/core/Face3.html
  45. 345 0
      docs/api/zh/core/Geometry.html
  46. 44 0
      docs/api/zh/core/InstancedBufferAttribute.html
  47. 50 0
      docs/api/zh/core/InstancedBufferGeometry.html
  48. 48 0
      docs/api/zh/core/InstancedInterleavedBuffer.html
  49. 119 0
      docs/api/zh/core/InterleavedBuffer.html
  50. 104 0
      docs/api/zh/core/InterleavedBufferAttribute.html
  51. 82 0
      docs/api/zh/core/Layers.html
  52. 438 0
      docs/api/zh/core/Object3D.html
  53. 189 0
      docs/api/zh/core/Raycaster.html
  54. 213 0
      docs/api/zh/core/Uniform.html
  55. 56 0
      docs/api/zh/core/bufferAttributeTypes/BufferAttributeTypes.html
  56. 620 0
      docs/api/zh/deprecated/DeprecatedList.html
  57. 31 0
      docs/api/zh/extras/Earcut.html
  58. 54 0
      docs/api/zh/extras/ShapeUtils.html
  59. 116 0
      docs/api/zh/extras/core/Curve.html
  60. 60 0
      docs/api/zh/extras/core/CurvePath.html
  61. 61 0
      docs/api/zh/extras/core/Font.html
  62. 47 0
      docs/api/zh/extras/core/Interpolations.html
  63. 145 0
      docs/api/zh/extras/core/Path.html
  64. 101 0
      docs/api/zh/extras/core/Shape.html
  65. 91 0
      docs/api/zh/extras/core/ShapePath.html
  66. 32 0
      docs/api/zh/extras/curves/ArcCurve.html
  67. 81 0
      docs/api/zh/extras/curves/CatmullRomCurve3.html
  68. 81 0
      docs/api/zh/extras/curves/CubicBezierCurve.html
  69. 82 0
      docs/api/zh/extras/curves/CubicBezierCurve3.html
  70. 105 0
      docs/api/zh/extras/curves/EllipseCurve.html
  71. 51 0
      docs/api/zh/extras/curves/LineCurve.html
  72. 50 0
      docs/api/zh/extras/curves/LineCurve3.html
  73. 77 0
      docs/api/zh/extras/curves/QuadraticBezierCurve.html
  74. 77 0
      docs/api/zh/extras/curves/QuadraticBezierCurve3.html
  75. 72 0
      docs/api/zh/extras/curves/SplineCurve.html
  76. 42 0
      docs/api/zh/extras/objects/ImmediateRenderObject.html
  77. 75 0
      docs/api/zh/geometries/BoxBufferGeometry.html
  78. 75 0
      docs/api/zh/geometries/BoxGeometry.html
  79. 65 0
      docs/api/zh/geometries/CircleBufferGeometry.html
  80. 66 0
      docs/api/zh/geometries/CircleGeometry.html
  81. 67 0
      docs/api/zh/geometries/ConeBufferGeometry.html
  82. 67 0
      docs/api/zh/geometries/ConeGeometry.html
  83. 68 0
      docs/api/zh/geometries/CylinderBufferGeometry.html
  84. 68 0
      docs/api/zh/geometries/CylinderGeometry.html
  85. 54 0
      docs/api/zh/geometries/DodecahedronBufferGeometry.html
  86. 54 0
      docs/api/zh/geometries/DodecahedronGeometry.html
  87. 47 0
      docs/api/zh/geometries/EdgesGeometry.html
  88. 106 0
      docs/api/zh/geometries/ExtrudeBufferGeometry.html
  89. 106 0
      docs/api/zh/geometries/ExtrudeGeometry.html
  90. 53 0
      docs/api/zh/geometries/IcosahedronBufferGeometry.html
  91. 54 0
      docs/api/zh/geometries/IcosahedronGeometry.html
  92. 72 0
      docs/api/zh/geometries/LatheBufferGeometry.html
  93. 72 0
      docs/api/zh/geometries/LatheGeometry.html
  94. 53 0
      docs/api/zh/geometries/OctahedronBufferGeometry.html
  95. 54 0
      docs/api/zh/geometries/OctahedronGeometry.html
  96. 67 0
      docs/api/zh/geometries/ParametricBufferGeometry.html
  97. 68 0
      docs/api/zh/geometries/ParametricGeometry.html
  98. 64 0
      docs/api/zh/geometries/PlaneBufferGeometry.html
  99. 64 0
      docs/api/zh/geometries/PlaneGeometry.html
  100. 64 0
      docs/api/zh/geometries/PolyhedronBufferGeometry.html

+ 424 - 401
build/three.js

@@ -6158,6 +6158,10 @@
 
 	var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif\n";
 
+	var background_frag = "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tgl_FragColor = texture2D( t2D, vUv );\n}\n";
+
+	var background_vert = "varying vec2 vUv;\nvoid main() {\n\tvUv = uv;\n\tgl_Position = vec4( position, 1.0 );\n\tgl_Position.z = 1.0;\n}\n";
+
 	var cube_frag = "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n";
 
 	var cube_vert = "varying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}\n";
@@ -6305,6 +6309,8 @@
 		uv2_vertex: uv2_vertex,
 		worldpos_vertex: worldpos_vertex,
 
+		background_frag: background_frag,
+		background_vert: background_vert,
 		cube_frag: cube_frag,
 		cube_vert: cube_vert,
 		depth_frag: depth_frag,
@@ -7385,6 +7391,16 @@
 
 		},
 
+		background: {
+
+			uniforms: {
+				t2D: { value: null },
+			},
+
+			vertexShader: ShaderChunk.background_vert,
+			fragmentShader: ShaderChunk.background_frag
+
+		},
 		/* -------------------------------------------------------------------------
 		//	Cube map shader
 		 ------------------------------------------------------------------------- */
@@ -7671,6 +7687,64 @@
 
 	}
 
+	/**
+	 * @author mrdoob / http://mrdoob.com/
+	 * @author alteredq / http://alteredqualia.com/
+	 */
+
+	function Face3( a, b, c, normal, color, materialIndex ) {
+
+		this.a = a;
+		this.b = b;
+		this.c = c;
+
+		this.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();
+		this.vertexNormals = Array.isArray( normal ) ? normal : [];
+
+		this.color = ( color && color.isColor ) ? color : new Color();
+		this.vertexColors = Array.isArray( color ) ? color : [];
+
+		this.materialIndex = materialIndex !== undefined ? materialIndex : 0;
+
+	}
+
+	Object.assign( Face3.prototype, {
+
+		clone: function () {
+
+			return new this.constructor().copy( this );
+
+		},
+
+		copy: function ( source ) {
+
+			this.a = source.a;
+			this.b = source.b;
+			this.c = source.c;
+
+			this.normal.copy( source.normal );
+			this.color.copy( source.color );
+
+			this.materialIndex = source.materialIndex;
+
+			for ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) {
+
+				this.vertexNormals[ i ] = source.vertexNormals[ i ].clone();
+
+			}
+
+			for ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) {
+
+				this.vertexColors[ i ] = source.vertexColors[ i ].clone();
+
+			}
+
+			return this;
+
+		}
+
+	} );
+
 	/**
 	 * @author mrdoob / http://mrdoob.com/
 	 * @author WestLangley / http://github.com/WestLangley
@@ -8938,277 +9012,6 @@
 
 	} );
 
-	/**
-	 * @author mrdoob / http://mrdoob.com/
-	 * @author mikael emtinger / http://gomo.se/
-	 * @author WestLangley / http://github.com/WestLangley
-	*/
-
-	function Camera() {
-
-		Object3D.call( this );
-
-		this.type = 'Camera';
-
-		this.matrixWorldInverse = new Matrix4();
-
-		this.projectionMatrix = new Matrix4();
-		this.projectionMatrixInverse = new Matrix4();
-
-	}
-
-	Camera.prototype = Object.assign( Object.create( Object3D.prototype ), {
-
-		constructor: Camera,
-
-		isCamera: true,
-
-		copy: function ( source, recursive ) {
-
-			Object3D.prototype.copy.call( this, source, recursive );
-
-			this.matrixWorldInverse.copy( source.matrixWorldInverse );
-
-			this.projectionMatrix.copy( source.projectionMatrix );
-			this.projectionMatrixInverse.copy( source.projectionMatrixInverse );
-
-			return this;
-
-		},
-
-		getWorldDirection: function ( target ) {
-
-			if ( target === undefined ) {
-
-				console.warn( 'THREE.Camera: .getWorldDirection() target is now required' );
-				target = new Vector3();
-
-			}
-
-			this.updateMatrixWorld( true );
-
-			var e = this.matrixWorld.elements;
-
-			return target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();
-
-		},
-
-		updateMatrixWorld: function ( force ) {
-
-			Object3D.prototype.updateMatrixWorld.call( this, force );
-
-			this.matrixWorldInverse.getInverse( this.matrixWorld );
-
-		},
-
-		clone: function () {
-
-			return new this.constructor().copy( this );
-
-		}
-
-	} );
-
-	/**
-	 * @author alteredq / http://alteredqualia.com/
-	 * @author arose / http://github.com/arose
-	 */
-
-	function OrthographicCamera( left, right, top, bottom, near, far ) {
-
-		Camera.call( this );
-
-		this.type = 'OrthographicCamera';
-
-		this.zoom = 1;
-		this.view = null;
-
-		this.left = left;
-		this.right = right;
-		this.top = top;
-		this.bottom = bottom;
-
-		this.near = ( near !== undefined ) ? near : 0.1;
-		this.far = ( far !== undefined ) ? far : 2000;
-
-		this.updateProjectionMatrix();
-
-	}
-
-	OrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {
-
-		constructor: OrthographicCamera,
-
-		isOrthographicCamera: true,
-
-		copy: function ( source, recursive ) {
-
-			Camera.prototype.copy.call( this, source, recursive );
-
-			this.left = source.left;
-			this.right = source.right;
-			this.top = source.top;
-			this.bottom = source.bottom;
-			this.near = source.near;
-			this.far = source.far;
-
-			this.zoom = source.zoom;
-			this.view = source.view === null ? null : Object.assign( {}, source.view );
-
-			return this;
-
-		},
-
-		setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {
-
-			if ( this.view === null ) {
-
-				this.view = {
-					enabled: true,
-					fullWidth: 1,
-					fullHeight: 1,
-					offsetX: 0,
-					offsetY: 0,
-					width: 1,
-					height: 1
-				};
-
-			}
-
-			this.view.enabled = true;
-			this.view.fullWidth = fullWidth;
-			this.view.fullHeight = fullHeight;
-			this.view.offsetX = x;
-			this.view.offsetY = y;
-			this.view.width = width;
-			this.view.height = height;
-
-			this.updateProjectionMatrix();
-
-		},
-
-		clearViewOffset: function () {
-
-			if ( this.view !== null ) {
-
-				this.view.enabled = false;
-
-			}
-
-			this.updateProjectionMatrix();
-
-		},
-
-		updateProjectionMatrix: function () {
-
-			var dx = ( this.right - this.left ) / ( 2 * this.zoom );
-			var dy = ( this.top - this.bottom ) / ( 2 * this.zoom );
-			var cx = ( this.right + this.left ) / 2;
-			var cy = ( this.top + this.bottom ) / 2;
-
-			var left = cx - dx;
-			var right = cx + dx;
-			var top = cy + dy;
-			var bottom = cy - dy;
-
-			if ( this.view !== null && this.view.enabled ) {
-
-				var zoomW = this.zoom / ( this.view.width / this.view.fullWidth );
-				var zoomH = this.zoom / ( this.view.height / this.view.fullHeight );
-				var scaleW = ( this.right - this.left ) / this.view.width;
-				var scaleH = ( this.top - this.bottom ) / this.view.height;
-
-				left += scaleW * ( this.view.offsetX / zoomW );
-				right = left + scaleW * ( this.view.width / zoomW );
-				top -= scaleH * ( this.view.offsetY / zoomH );
-				bottom = top - scaleH * ( this.view.height / zoomH );
-
-			}
-
-			this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );
-
-			this.projectionMatrixInverse.getInverse( this.projectionMatrix );
-
-		},
-
-		toJSON: function ( meta ) {
-
-			var data = Object3D.prototype.toJSON.call( this, meta );
-
-			data.object.zoom = this.zoom;
-			data.object.left = this.left;
-			data.object.right = this.right;
-			data.object.top = this.top;
-			data.object.bottom = this.bottom;
-			data.object.near = this.near;
-			data.object.far = this.far;
-
-			if ( this.view !== null ) data.object.view = Object.assign( {}, this.view );
-
-			return data;
-
-		}
-
-	} );
-
-	/**
-	 * @author mrdoob / http://mrdoob.com/
-	 * @author alteredq / http://alteredqualia.com/
-	 */
-
-	function Face3( a, b, c, normal, color, materialIndex ) {
-
-		this.a = a;
-		this.b = b;
-		this.c = c;
-
-		this.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();
-		this.vertexNormals = Array.isArray( normal ) ? normal : [];
-
-		this.color = ( color && color.isColor ) ? color : new Color();
-		this.vertexColors = Array.isArray( color ) ? color : [];
-
-		this.materialIndex = materialIndex !== undefined ? materialIndex : 0;
-
-	}
-
-	Object.assign( Face3.prototype, {
-
-		clone: function () {
-
-			return new this.constructor().copy( this );
-
-		},
-
-		copy: function ( source ) {
-
-			this.a = source.a;
-			this.b = source.b;
-			this.c = source.c;
-
-			this.normal.copy( source.normal );
-			this.color.copy( source.color );
-
-			this.materialIndex = source.materialIndex;
-
-			for ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) {
-
-				this.vertexNormals[ i ] = source.vertexNormals[ i ].clone();
-
-			}
-
-			for ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) {
-
-				this.vertexColors[ i ] = source.vertexColors[ i ].clone();
-
-			}
-
-			return this;
-
-		}
-
-	} );
-
 	/**
 	 * @author mrdoob / http://mrdoob.com/
 	 * @author kile / http://kile.stravaganza.org/
@@ -13149,120 +12952,6 @@
 
 	} );
 
-	/**
-	 * @author mrdoob / http://mrdoob.com/
-	 * @author alteredq / http://alteredqualia.com/
-	 *
-	 * parameters = {
-	 *  color: <hex>,
-	 *  opacity: <float>,
-	 *  map: new THREE.Texture( <Image> ),
-	 *
-	 *  lightMap: new THREE.Texture( <Image> ),
-	 *  lightMapIntensity: <float>
-	 *
-	 *  aoMap: new THREE.Texture( <Image> ),
-	 *  aoMapIntensity: <float>
-	 *
-	 *  specularMap: new THREE.Texture( <Image> ),
-	 *
-	 *  alphaMap: new THREE.Texture( <Image> ),
-	 *
-	 *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),
-	 *  combine: THREE.Multiply,
-	 *  reflectivity: <float>,
-	 *  refractionRatio: <float>,
-	 *
-	 *  depthTest: <bool>,
-	 *  depthWrite: <bool>,
-	 *
-	 *  wireframe: <boolean>,
-	 *  wireframeLinewidth: <float>,
-	 *
-	 *  skinning: <bool>,
-	 *  morphTargets: <bool>
-	 * }
-	 */
-
-	function MeshBasicMaterial( parameters ) {
-
-		Material.call( this );
-
-		this.type = 'MeshBasicMaterial';
-
-		this.color = new Color( 0xffffff ); // emissive
-
-		this.map = null;
-
-		this.lightMap = null;
-		this.lightMapIntensity = 1.0;
-
-		this.aoMap = null;
-		this.aoMapIntensity = 1.0;
-
-		this.specularMap = null;
-
-		this.alphaMap = null;
-
-		this.envMap = null;
-		this.combine = MultiplyOperation;
-		this.reflectivity = 1;
-		this.refractionRatio = 0.98;
-
-		this.wireframe = false;
-		this.wireframeLinewidth = 1;
-		this.wireframeLinecap = 'round';
-		this.wireframeLinejoin = 'round';
-
-		this.skinning = false;
-		this.morphTargets = false;
-
-		this.lights = false;
-
-		this.setValues( parameters );
-
-	}
-
-	MeshBasicMaterial.prototype = Object.create( Material.prototype );
-	MeshBasicMaterial.prototype.constructor = MeshBasicMaterial;
-
-	MeshBasicMaterial.prototype.isMeshBasicMaterial = true;
-
-	MeshBasicMaterial.prototype.copy = function ( source ) {
-
-		Material.prototype.copy.call( this, source );
-
-		this.color.copy( source.color );
-
-		this.map = source.map;
-
-		this.lightMap = source.lightMap;
-		this.lightMapIntensity = source.lightMapIntensity;
-
-		this.aoMap = source.aoMap;
-		this.aoMapIntensity = source.aoMapIntensity;
-
-		this.specularMap = source.specularMap;
-
-		this.alphaMap = source.alphaMap;
-
-		this.envMap = source.envMap;
-		this.combine = source.combine;
-		this.reflectivity = source.reflectivity;
-		this.refractionRatio = source.refractionRatio;
-
-		this.wireframe = source.wireframe;
-		this.wireframeLinewidth = source.wireframeLinewidth;
-		this.wireframeLinecap = source.wireframeLinecap;
-		this.wireframeLinejoin = source.wireframeLinejoin;
-
-		this.skinning = source.skinning;
-		this.morphTargets = source.morphTargets;
-
-		return this;
-
-	};
-
 	/**
 	 * @author alteredq / http://alteredqualia.com/
 	 *
@@ -14335,6 +14024,120 @@
 
 	} );
 
+	/**
+	 * @author mrdoob / http://mrdoob.com/
+	 * @author alteredq / http://alteredqualia.com/
+	 *
+	 * parameters = {
+	 *  color: <hex>,
+	 *  opacity: <float>,
+	 *  map: new THREE.Texture( <Image> ),
+	 *
+	 *  lightMap: new THREE.Texture( <Image> ),
+	 *  lightMapIntensity: <float>
+	 *
+	 *  aoMap: new THREE.Texture( <Image> ),
+	 *  aoMapIntensity: <float>
+	 *
+	 *  specularMap: new THREE.Texture( <Image> ),
+	 *
+	 *  alphaMap: new THREE.Texture( <Image> ),
+	 *
+	 *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),
+	 *  combine: THREE.Multiply,
+	 *  reflectivity: <float>,
+	 *  refractionRatio: <float>,
+	 *
+	 *  depthTest: <bool>,
+	 *  depthWrite: <bool>,
+	 *
+	 *  wireframe: <boolean>,
+	 *  wireframeLinewidth: <float>,
+	 *
+	 *  skinning: <bool>,
+	 *  morphTargets: <bool>
+	 * }
+	 */
+
+	function MeshBasicMaterial( parameters ) {
+
+		Material.call( this );
+
+		this.type = 'MeshBasicMaterial';
+
+		this.color = new Color( 0xffffff ); // emissive
+
+		this.map = null;
+
+		this.lightMap = null;
+		this.lightMapIntensity = 1.0;
+
+		this.aoMap = null;
+		this.aoMapIntensity = 1.0;
+
+		this.specularMap = null;
+
+		this.alphaMap = null;
+
+		this.envMap = null;
+		this.combine = MultiplyOperation;
+		this.reflectivity = 1;
+		this.refractionRatio = 0.98;
+
+		this.wireframe = false;
+		this.wireframeLinewidth = 1;
+		this.wireframeLinecap = 'round';
+		this.wireframeLinejoin = 'round';
+
+		this.skinning = false;
+		this.morphTargets = false;
+
+		this.lights = false;
+
+		this.setValues( parameters );
+
+	}
+
+	MeshBasicMaterial.prototype = Object.create( Material.prototype );
+	MeshBasicMaterial.prototype.constructor = MeshBasicMaterial;
+
+	MeshBasicMaterial.prototype.isMeshBasicMaterial = true;
+
+	MeshBasicMaterial.prototype.copy = function ( source ) {
+
+		Material.prototype.copy.call( this, source );
+
+		this.color.copy( source.color );
+
+		this.map = source.map;
+
+		this.lightMap = source.lightMap;
+		this.lightMapIntensity = source.lightMapIntensity;
+
+		this.aoMap = source.aoMap;
+		this.aoMapIntensity = source.aoMapIntensity;
+
+		this.specularMap = source.specularMap;
+
+		this.alphaMap = source.alphaMap;
+
+		this.envMap = source.envMap;
+		this.combine = source.combine;
+		this.reflectivity = source.reflectivity;
+		this.refractionRatio = source.refractionRatio;
+
+		this.wireframe = source.wireframe;
+		this.wireframeLinewidth = source.wireframeLinewidth;
+		this.wireframeLinecap = source.wireframeLinecap;
+		this.wireframeLinejoin = source.wireframeLinejoin;
+
+		this.skinning = source.skinning;
+		this.morphTargets = source.morphTargets;
+
+		return this;
+
+	};
+
 	/**
 	 * @author mrdoob / http://mrdoob.com/
 	 * @author alteredq / http://alteredqualia.com/
@@ -14792,7 +14595,7 @@
 		var clearColor = new Color( 0x000000 );
 		var clearAlpha = 0;
 
-		var planeCamera, planeMesh;
+		var planeMesh;
 		var boxMesh;
 
 		function render( renderList, scene, camera, forceClear ) {
@@ -14852,24 +14655,30 @@
 
 			} else if ( background && background.isTexture ) {
 
-				if ( planeCamera === undefined ) {
-
-					planeCamera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
+				if ( planeMesh === undefined ) {
 
 					planeMesh = new Mesh(
 						new PlaneBufferGeometry( 2, 2 ),
-						new MeshBasicMaterial( { depthTest: false, depthWrite: false, fog: false } )
+						new ShaderMaterial( {
+							uniforms: ShaderLib.background.uniforms,
+							vertexShader: ShaderLib.background.vertexShader,
+							fragmentShader: ShaderLib.background.fragmentShader,
+							side: FrontSide,
+							depthTest: true,
+							depthWrite: false,
+							fog: false
+						} )
 					);
 
+					planeMesh.geometry.removeAttribute( 'normal' );
+
 					objects.update( planeMesh );
 
 				}
 
-				planeMesh.material.map = background;
+				planeMesh.material.uniforms.t2D.value = background;
 
-				// TODO Push this to renderList
-
-				renderer.renderBufferDirect( planeCamera, null, planeMesh.geometry, planeMesh.material, planeMesh, null );
+				renderList.push( planeMesh, planeMesh.geometry, planeMesh.material, 0, null );
 
 			}
 
@@ -21113,6 +20922,77 @@
 
 	} );
 
+	/**
+	 * @author mrdoob / http://mrdoob.com/
+	 * @author mikael emtinger / http://gomo.se/
+	 * @author WestLangley / http://github.com/WestLangley
+	*/
+
+	function Camera() {
+
+		Object3D.call( this );
+
+		this.type = 'Camera';
+
+		this.matrixWorldInverse = new Matrix4();
+
+		this.projectionMatrix = new Matrix4();
+		this.projectionMatrixInverse = new Matrix4();
+
+	}
+
+	Camera.prototype = Object.assign( Object.create( Object3D.prototype ), {
+
+		constructor: Camera,
+
+		isCamera: true,
+
+		copy: function ( source, recursive ) {
+
+			Object3D.prototype.copy.call( this, source, recursive );
+
+			this.matrixWorldInverse.copy( source.matrixWorldInverse );
+
+			this.projectionMatrix.copy( source.projectionMatrix );
+			this.projectionMatrixInverse.copy( source.projectionMatrixInverse );
+
+			return this;
+
+		},
+
+		getWorldDirection: function ( target ) {
+
+			if ( target === undefined ) {
+
+				console.warn( 'THREE.Camera: .getWorldDirection() target is now required' );
+				target = new Vector3();
+
+			}
+
+			this.updateMatrixWorld( true );
+
+			var e = this.matrixWorld.elements;
+
+			return target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();
+
+		},
+
+		updateMatrixWorld: function ( force ) {
+
+			Object3D.prototype.updateMatrixWorld.call( this, force );
+
+			this.matrixWorldInverse.getInverse( this.matrixWorld );
+
+		},
+
+		clone: function () {
+
+			return new this.constructor().copy( this );
+
+		}
+
+	} );
+
 	/**
 	 * @author mrdoob / http://mrdoob.com/
 	 * @author greggman / http://games.greggman.com/
@@ -22505,13 +22385,6 @@
 
 		};
 
-		this.clearTarget = function ( renderTarget, color, depth, stencil ) {
-
-			this.setRenderTarget( renderTarget );
-			this.clear( color, depth, stencil );
-
-		};
-
 		//
 
 		this.dispose = function () {
@@ -35208,6 +35081,148 @@
 
 	} );
 
+	/**
+	 * @author alteredq / http://alteredqualia.com/
+	 * @author arose / http://github.com/arose
+	 */
+
+	function OrthographicCamera( left, right, top, bottom, near, far ) {
+
+		Camera.call( this );
+
+		this.type = 'OrthographicCamera';
+
+		this.zoom = 1;
+		this.view = null;
+
+		this.left = left;
+		this.right = right;
+		this.top = top;
+		this.bottom = bottom;
+
+		this.near = ( near !== undefined ) ? near : 0.1;
+		this.far = ( far !== undefined ) ? far : 2000;
+
+		this.updateProjectionMatrix();
+
+	}
+
+	OrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {
+
+		constructor: OrthographicCamera,
+
+		isOrthographicCamera: true,
+
+		copy: function ( source, recursive ) {
+
+			Camera.prototype.copy.call( this, source, recursive );
+
+			this.left = source.left;
+			this.right = source.right;
+			this.top = source.top;
+			this.bottom = source.bottom;
+			this.near = source.near;
+			this.far = source.far;
+
+			this.zoom = source.zoom;
+			this.view = source.view === null ? null : Object.assign( {}, source.view );
+
+			return this;
+
+		},
+
+		setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {
+
+			if ( this.view === null ) {
+
+				this.view = {
+					enabled: true,
+					fullWidth: 1,
+					fullHeight: 1,
+					offsetX: 0,
+					offsetY: 0,
+					width: 1,
+					height: 1
+				};
+
+			}
+
+			this.view.enabled = true;
+			this.view.fullWidth = fullWidth;
+			this.view.fullHeight = fullHeight;
+			this.view.offsetX = x;
+			this.view.offsetY = y;
+			this.view.width = width;
+			this.view.height = height;
+
+			this.updateProjectionMatrix();
+
+		},
+
+		clearViewOffset: function () {
+
+			if ( this.view !== null ) {
+
+				this.view.enabled = false;
+
+			}
+
+			this.updateProjectionMatrix();
+
+		},
+
+		updateProjectionMatrix: function () {
+
+			var dx = ( this.right - this.left ) / ( 2 * this.zoom );
+			var dy = ( this.top - this.bottom ) / ( 2 * this.zoom );
+			var cx = ( this.right + this.left ) / 2;
+			var cy = ( this.top + this.bottom ) / 2;
+
+			var left = cx - dx;
+			var right = cx + dx;
+			var top = cy + dy;
+			var bottom = cy - dy;
+
+			if ( this.view !== null && this.view.enabled ) {
+
+				var zoomW = this.zoom / ( this.view.width / this.view.fullWidth );
+				var zoomH = this.zoom / ( this.view.height / this.view.fullHeight );
+				var scaleW = ( this.right - this.left ) / this.view.width;
+				var scaleH = ( this.top - this.bottom ) / this.view.height;
+
+				left += scaleW * ( this.view.offsetX / zoomW );
+				right = left + scaleW * ( this.view.width / zoomW );
+				top -= scaleH * ( this.view.offsetY / zoomH );
+				bottom = top - scaleH * ( this.view.height / zoomH );
+
+			}
+
+			this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );
+
+			this.projectionMatrixInverse.getInverse( this.projectionMatrix );
+
+		},
+
+		toJSON: function ( meta ) {
+
+			var data = Object3D.prototype.toJSON.call( this, meta );
+
+			data.object.zoom = this.zoom;
+			data.object.left = this.left;
+			data.object.right = this.right;
+			data.object.top = this.top;
+			data.object.bottom = this.bottom;
+			data.object.near = this.near;
+			data.object.far = this.far;
+
+			if ( this.view !== null ) data.object.view = Object.assign( {}, this.view );
+
+			return data;
+
+		}
+
+	} );
+
 	/**
 	 * @author mrdoob / http://mrdoob.com/
 	 */
@@ -47008,6 +47023,14 @@
 
 	Object.assign( WebGLRenderer.prototype, {
 
+		clearTarget: function ( renderTarget, color, depth, stencil ) {
+
+			console.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' );
+			this.setRenderTarget( renderTarget );
+			this.clear( color, depth, stencil );
+
+		},
+
 		animate: function ( callback ) {
 
 			console.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );

文件差異過大導致無法顯示
+ 364 - 364
build/three.min.js


+ 424 - 401
build/three.module.js

@@ -6152,6 +6152,10 @@ var uv2_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 =
 
 var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif\n";
 
+var background_frag = "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tgl_FragColor = texture2D( t2D, vUv );\n}\n";
+
+var background_vert = "varying vec2 vUv;\nvoid main() {\n\tvUv = uv;\n\tgl_Position = vec4( position, 1.0 );\n\tgl_Position.z = 1.0;\n}\n";
+
 var cube_frag = "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n";
 
 var cube_vert = "varying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}\n";
@@ -6299,6 +6303,8 @@ var ShaderChunk = {
 	uv2_vertex: uv2_vertex,
 	worldpos_vertex: worldpos_vertex,
 
+	background_frag: background_frag,
+	background_vert: background_vert,
 	cube_frag: cube_frag,
 	cube_vert: cube_vert,
 	depth_frag: depth_frag,
@@ -7379,6 +7385,16 @@ var ShaderLib = {
 
 	},
 
+	background: {
+
+		uniforms: {
+			t2D: { value: null },
+		},
+
+		vertexShader: ShaderChunk.background_vert,
+		fragmentShader: ShaderChunk.background_frag
+
+	},
 	/* -------------------------------------------------------------------------
 	//	Cube map shader
 	 ------------------------------------------------------------------------- */
@@ -7665,6 +7681,64 @@ function WebGLAttributes( gl ) {
 
 }
 
+/**
+ * @author mrdoob / http://mrdoob.com/
+ * @author alteredq / http://alteredqualia.com/
+ */
+
+function Face3( a, b, c, normal, color, materialIndex ) {
+
+	this.a = a;
+	this.b = b;
+	this.c = c;
+
+	this.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();
+	this.vertexNormals = Array.isArray( normal ) ? normal : [];
+
+	this.color = ( color && color.isColor ) ? color : new Color();
+	this.vertexColors = Array.isArray( color ) ? color : [];
+
+	this.materialIndex = materialIndex !== undefined ? materialIndex : 0;
+
+}
+
+Object.assign( Face3.prototype, {
+
+	clone: function () {
+
+		return new this.constructor().copy( this );
+
+	},
+
+	copy: function ( source ) {
+
+		this.a = source.a;
+		this.b = source.b;
+		this.c = source.c;
+
+		this.normal.copy( source.normal );
+		this.color.copy( source.color );
+
+		this.materialIndex = source.materialIndex;
+
+		for ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) {
+
+			this.vertexNormals[ i ] = source.vertexNormals[ i ].clone();
+
+		}
+
+		for ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) {
+
+			this.vertexColors[ i ] = source.vertexColors[ i ].clone();
+
+		}
+
+		return this;
+
+	}
+
+} );
+
 /**
  * @author mrdoob / http://mrdoob.com/
  * @author WestLangley / http://github.com/WestLangley
@@ -8932,277 +9006,6 @@ Object3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ),
 
 } );
 
-/**
- * @author mrdoob / http://mrdoob.com/
- * @author mikael emtinger / http://gomo.se/
- * @author WestLangley / http://github.com/WestLangley
-*/
-
-function Camera() {
-
-	Object3D.call( this );
-
-	this.type = 'Camera';
-
-	this.matrixWorldInverse = new Matrix4();
-
-	this.projectionMatrix = new Matrix4();
-	this.projectionMatrixInverse = new Matrix4();
-
-}
-
-Camera.prototype = Object.assign( Object.create( Object3D.prototype ), {
-
-	constructor: Camera,
-
-	isCamera: true,
-
-	copy: function ( source, recursive ) {
-
-		Object3D.prototype.copy.call( this, source, recursive );
-
-		this.matrixWorldInverse.copy( source.matrixWorldInverse );
-
-		this.projectionMatrix.copy( source.projectionMatrix );
-		this.projectionMatrixInverse.copy( source.projectionMatrixInverse );
-
-		return this;
-
-	},
-
-	getWorldDirection: function ( target ) {
-
-		if ( target === undefined ) {
-
-			console.warn( 'THREE.Camera: .getWorldDirection() target is now required' );
-			target = new Vector3();
-
-		}
-
-		this.updateMatrixWorld( true );
-
-		var e = this.matrixWorld.elements;
-
-		return target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();
-
-	},
-
-	updateMatrixWorld: function ( force ) {
-
-		Object3D.prototype.updateMatrixWorld.call( this, force );
-
-		this.matrixWorldInverse.getInverse( this.matrixWorld );
-
-	},
-
-	clone: function () {
-
-		return new this.constructor().copy( this );
-
-	}
-
-} );
-
-/**
- * @author alteredq / http://alteredqualia.com/
- * @author arose / http://github.com/arose
- */
-
-function OrthographicCamera( left, right, top, bottom, near, far ) {
-
-	Camera.call( this );
-
-	this.type = 'OrthographicCamera';
-
-	this.zoom = 1;
-	this.view = null;
-
-	this.left = left;
-	this.right = right;
-	this.top = top;
-	this.bottom = bottom;
-
-	this.near = ( near !== undefined ) ? near : 0.1;
-	this.far = ( far !== undefined ) ? far : 2000;
-
-	this.updateProjectionMatrix();
-
-}
-
-OrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {
-
-	constructor: OrthographicCamera,
-
-	isOrthographicCamera: true,
-
-	copy: function ( source, recursive ) {
-
-		Camera.prototype.copy.call( this, source, recursive );
-
-		this.left = source.left;
-		this.right = source.right;
-		this.top = source.top;
-		this.bottom = source.bottom;
-		this.near = source.near;
-		this.far = source.far;
-
-		this.zoom = source.zoom;
-		this.view = source.view === null ? null : Object.assign( {}, source.view );
-
-		return this;
-
-	},
-
-	setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {
-
-		if ( this.view === null ) {
-
-			this.view = {
-				enabled: true,
-				fullWidth: 1,
-				fullHeight: 1,
-				offsetX: 0,
-				offsetY: 0,
-				width: 1,
-				height: 1
-			};
-
-		}
-
-		this.view.enabled = true;
-		this.view.fullWidth = fullWidth;
-		this.view.fullHeight = fullHeight;
-		this.view.offsetX = x;
-		this.view.offsetY = y;
-		this.view.width = width;
-		this.view.height = height;
-
-		this.updateProjectionMatrix();
-
-	},
-
-	clearViewOffset: function () {
-
-		if ( this.view !== null ) {
-
-			this.view.enabled = false;
-
-		}
-
-		this.updateProjectionMatrix();
-
-	},
-
-	updateProjectionMatrix: function () {
-
-		var dx = ( this.right - this.left ) / ( 2 * this.zoom );
-		var dy = ( this.top - this.bottom ) / ( 2 * this.zoom );
-		var cx = ( this.right + this.left ) / 2;
-		var cy = ( this.top + this.bottom ) / 2;
-
-		var left = cx - dx;
-		var right = cx + dx;
-		var top = cy + dy;
-		var bottom = cy - dy;
-
-		if ( this.view !== null && this.view.enabled ) {
-
-			var zoomW = this.zoom / ( this.view.width / this.view.fullWidth );
-			var zoomH = this.zoom / ( this.view.height / this.view.fullHeight );
-			var scaleW = ( this.right - this.left ) / this.view.width;
-			var scaleH = ( this.top - this.bottom ) / this.view.height;
-
-			left += scaleW * ( this.view.offsetX / zoomW );
-			right = left + scaleW * ( this.view.width / zoomW );
-			top -= scaleH * ( this.view.offsetY / zoomH );
-			bottom = top - scaleH * ( this.view.height / zoomH );
-
-		}
-
-		this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );
-
-		this.projectionMatrixInverse.getInverse( this.projectionMatrix );
-
-	},
-
-	toJSON: function ( meta ) {
-
-		var data = Object3D.prototype.toJSON.call( this, meta );
-
-		data.object.zoom = this.zoom;
-		data.object.left = this.left;
-		data.object.right = this.right;
-		data.object.top = this.top;
-		data.object.bottom = this.bottom;
-		data.object.near = this.near;
-		data.object.far = this.far;
-
-		if ( this.view !== null ) data.object.view = Object.assign( {}, this.view );
-
-		return data;
-
-	}
-
-} );
-
-/**
- * @author mrdoob / http://mrdoob.com/
- * @author alteredq / http://alteredqualia.com/
- */
-
-function Face3( a, b, c, normal, color, materialIndex ) {
-
-	this.a = a;
-	this.b = b;
-	this.c = c;
-
-	this.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();
-	this.vertexNormals = Array.isArray( normal ) ? normal : [];
-
-	this.color = ( color && color.isColor ) ? color : new Color();
-	this.vertexColors = Array.isArray( color ) ? color : [];
-
-	this.materialIndex = materialIndex !== undefined ? materialIndex : 0;
-
-}
-
-Object.assign( Face3.prototype, {
-
-	clone: function () {
-
-		return new this.constructor().copy( this );
-
-	},
-
-	copy: function ( source ) {
-
-		this.a = source.a;
-		this.b = source.b;
-		this.c = source.c;
-
-		this.normal.copy( source.normal );
-		this.color.copy( source.color );
-
-		this.materialIndex = source.materialIndex;
-
-		for ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) {
-
-			this.vertexNormals[ i ] = source.vertexNormals[ i ].clone();
-
-		}
-
-		for ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) {
-
-			this.vertexColors[ i ] = source.vertexColors[ i ].clone();
-
-		}
-
-		return this;
-
-	}
-
-} );
-
 /**
  * @author mrdoob / http://mrdoob.com/
  * @author kile / http://kile.stravaganza.org/
@@ -13143,120 +12946,6 @@ Material.prototype = Object.assign( Object.create( EventDispatcher.prototype ),
 
 } );
 
-/**
- * @author mrdoob / http://mrdoob.com/
- * @author alteredq / http://alteredqualia.com/
- *
- * parameters = {
- *  color: <hex>,
- *  opacity: <float>,
- *  map: new THREE.Texture( <Image> ),
- *
- *  lightMap: new THREE.Texture( <Image> ),
- *  lightMapIntensity: <float>
- *
- *  aoMap: new THREE.Texture( <Image> ),
- *  aoMapIntensity: <float>
- *
- *  specularMap: new THREE.Texture( <Image> ),
- *
- *  alphaMap: new THREE.Texture( <Image> ),
- *
- *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),
- *  combine: THREE.Multiply,
- *  reflectivity: <float>,
- *  refractionRatio: <float>,
- *
- *  depthTest: <bool>,
- *  depthWrite: <bool>,
- *
- *  wireframe: <boolean>,
- *  wireframeLinewidth: <float>,
- *
- *  skinning: <bool>,
- *  morphTargets: <bool>
- * }
- */
-
-function MeshBasicMaterial( parameters ) {
-
-	Material.call( this );
-
-	this.type = 'MeshBasicMaterial';
-
-	this.color = new Color( 0xffffff ); // emissive
-
-	this.map = null;
-
-	this.lightMap = null;
-	this.lightMapIntensity = 1.0;
-
-	this.aoMap = null;
-	this.aoMapIntensity = 1.0;
-
-	this.specularMap = null;
-
-	this.alphaMap = null;
-
-	this.envMap = null;
-	this.combine = MultiplyOperation;
-	this.reflectivity = 1;
-	this.refractionRatio = 0.98;
-
-	this.wireframe = false;
-	this.wireframeLinewidth = 1;
-	this.wireframeLinecap = 'round';
-	this.wireframeLinejoin = 'round';
-
-	this.skinning = false;
-	this.morphTargets = false;
-
-	this.lights = false;
-
-	this.setValues( parameters );
-
-}
-
-MeshBasicMaterial.prototype = Object.create( Material.prototype );
-MeshBasicMaterial.prototype.constructor = MeshBasicMaterial;
-
-MeshBasicMaterial.prototype.isMeshBasicMaterial = true;
-
-MeshBasicMaterial.prototype.copy = function ( source ) {
-
-	Material.prototype.copy.call( this, source );
-
-	this.color.copy( source.color );
-
-	this.map = source.map;
-
-	this.lightMap = source.lightMap;
-	this.lightMapIntensity = source.lightMapIntensity;
-
-	this.aoMap = source.aoMap;
-	this.aoMapIntensity = source.aoMapIntensity;
-
-	this.specularMap = source.specularMap;
-
-	this.alphaMap = source.alphaMap;
-
-	this.envMap = source.envMap;
-	this.combine = source.combine;
-	this.reflectivity = source.reflectivity;
-	this.refractionRatio = source.refractionRatio;
-
-	this.wireframe = source.wireframe;
-	this.wireframeLinewidth = source.wireframeLinewidth;
-	this.wireframeLinecap = source.wireframeLinecap;
-	this.wireframeLinejoin = source.wireframeLinejoin;
-
-	this.skinning = source.skinning;
-	this.morphTargets = source.morphTargets;
-
-	return this;
-
-};
-
 /**
  * @author alteredq / http://alteredqualia.com/
  *
@@ -14329,6 +14018,120 @@ Object.assign( Triangle.prototype, {
 
 } );
 
+/**
+ * @author mrdoob / http://mrdoob.com/
+ * @author alteredq / http://alteredqualia.com/
+ *
+ * parameters = {
+ *  color: <hex>,
+ *  opacity: <float>,
+ *  map: new THREE.Texture( <Image> ),
+ *
+ *  lightMap: new THREE.Texture( <Image> ),
+ *  lightMapIntensity: <float>
+ *
+ *  aoMap: new THREE.Texture( <Image> ),
+ *  aoMapIntensity: <float>
+ *
+ *  specularMap: new THREE.Texture( <Image> ),
+ *
+ *  alphaMap: new THREE.Texture( <Image> ),
+ *
+ *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),
+ *  combine: THREE.Multiply,
+ *  reflectivity: <float>,
+ *  refractionRatio: <float>,
+ *
+ *  depthTest: <bool>,
+ *  depthWrite: <bool>,
+ *
+ *  wireframe: <boolean>,
+ *  wireframeLinewidth: <float>,
+ *
+ *  skinning: <bool>,
+ *  morphTargets: <bool>
+ * }
+ */
+
+function MeshBasicMaterial( parameters ) {
+
+	Material.call( this );
+
+	this.type = 'MeshBasicMaterial';
+
+	this.color = new Color( 0xffffff ); // emissive
+
+	this.map = null;
+
+	this.lightMap = null;
+	this.lightMapIntensity = 1.0;
+
+	this.aoMap = null;
+	this.aoMapIntensity = 1.0;
+
+	this.specularMap = null;
+
+	this.alphaMap = null;
+
+	this.envMap = null;
+	this.combine = MultiplyOperation;
+	this.reflectivity = 1;
+	this.refractionRatio = 0.98;
+
+	this.wireframe = false;
+	this.wireframeLinewidth = 1;
+	this.wireframeLinecap = 'round';
+	this.wireframeLinejoin = 'round';
+
+	this.skinning = false;
+	this.morphTargets = false;
+
+	this.lights = false;
+
+	this.setValues( parameters );
+
+}
+
+MeshBasicMaterial.prototype = Object.create( Material.prototype );
+MeshBasicMaterial.prototype.constructor = MeshBasicMaterial;
+
+MeshBasicMaterial.prototype.isMeshBasicMaterial = true;
+
+MeshBasicMaterial.prototype.copy = function ( source ) {
+
+	Material.prototype.copy.call( this, source );
+
+	this.color.copy( source.color );
+
+	this.map = source.map;
+
+	this.lightMap = source.lightMap;
+	this.lightMapIntensity = source.lightMapIntensity;
+
+	this.aoMap = source.aoMap;
+	this.aoMapIntensity = source.aoMapIntensity;
+
+	this.specularMap = source.specularMap;
+
+	this.alphaMap = source.alphaMap;
+
+	this.envMap = source.envMap;
+	this.combine = source.combine;
+	this.reflectivity = source.reflectivity;
+	this.refractionRatio = source.refractionRatio;
+
+	this.wireframe = source.wireframe;
+	this.wireframeLinewidth = source.wireframeLinewidth;
+	this.wireframeLinecap = source.wireframeLinecap;
+	this.wireframeLinejoin = source.wireframeLinejoin;
+
+	this.skinning = source.skinning;
+	this.morphTargets = source.morphTargets;
+
+	return this;
+
+};
+
 /**
  * @author mrdoob / http://mrdoob.com/
  * @author alteredq / http://alteredqualia.com/
@@ -14786,7 +14589,7 @@ function WebGLBackground( renderer, state, objects, premultipliedAlpha ) {
 	var clearColor = new Color( 0x000000 );
 	var clearAlpha = 0;
 
-	var planeCamera, planeMesh;
+	var planeMesh;
 	var boxMesh;
 
 	function render( renderList, scene, camera, forceClear ) {
@@ -14846,24 +14649,30 @@ function WebGLBackground( renderer, state, objects, premultipliedAlpha ) {
 
 		} else if ( background && background.isTexture ) {
 
-			if ( planeCamera === undefined ) {
-
-				planeCamera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
+			if ( planeMesh === undefined ) {
 
 				planeMesh = new Mesh(
 					new PlaneBufferGeometry( 2, 2 ),
-					new MeshBasicMaterial( { depthTest: false, depthWrite: false, fog: false } )
+					new ShaderMaterial( {
+						uniforms: ShaderLib.background.uniforms,
+						vertexShader: ShaderLib.background.vertexShader,
+						fragmentShader: ShaderLib.background.fragmentShader,
+						side: FrontSide,
+						depthTest: true,
+						depthWrite: false,
+						fog: false
+					} )
 				);
 
+				planeMesh.geometry.removeAttribute( 'normal' );
+
 				objects.update( planeMesh );
 
 			}
 
-			planeMesh.material.map = background;
+			planeMesh.material.uniforms.t2D.value = background;
 
-			// TODO Push this to renderList
-
-			renderer.renderBufferDirect( planeCamera, null, planeMesh.geometry, planeMesh.material, planeMesh, null );
+			renderList.push( planeMesh, planeMesh.geometry, planeMesh.material, 0, null );
 
 		}
 
@@ -21107,6 +20916,77 @@ Group.prototype = Object.assign( Object.create( Object3D.prototype ), {
 
 } );
 
+/**
+ * @author mrdoob / http://mrdoob.com/
+ * @author mikael emtinger / http://gomo.se/
+ * @author WestLangley / http://github.com/WestLangley
+*/
+
+function Camera() {
+
+	Object3D.call( this );
+
+	this.type = 'Camera';
+
+	this.matrixWorldInverse = new Matrix4();
+
+	this.projectionMatrix = new Matrix4();
+	this.projectionMatrixInverse = new Matrix4();
+
+}
+
+Camera.prototype = Object.assign( Object.create( Object3D.prototype ), {
+
+	constructor: Camera,
+
+	isCamera: true,
+
+	copy: function ( source, recursive ) {
+
+		Object3D.prototype.copy.call( this, source, recursive );
+
+		this.matrixWorldInverse.copy( source.matrixWorldInverse );
+
+		this.projectionMatrix.copy( source.projectionMatrix );
+		this.projectionMatrixInverse.copy( source.projectionMatrixInverse );
+
+		return this;
+
+	},
+
+	getWorldDirection: function ( target ) {
+
+		if ( target === undefined ) {
+
+			console.warn( 'THREE.Camera: .getWorldDirection() target is now required' );
+			target = new Vector3();
+
+		}
+
+		this.updateMatrixWorld( true );
+
+		var e = this.matrixWorld.elements;
+
+		return target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();
+
+	},
+
+	updateMatrixWorld: function ( force ) {
+
+		Object3D.prototype.updateMatrixWorld.call( this, force );
+
+		this.matrixWorldInverse.getInverse( this.matrixWorld );
+
+	},
+
+	clone: function () {
+
+		return new this.constructor().copy( this );
+
+	}
+
+} );
+
 /**
  * @author mrdoob / http://mrdoob.com/
  * @author greggman / http://games.greggman.com/
@@ -22499,13 +22379,6 @@ function WebGLRenderer( parameters ) {
 
 	};
 
-	this.clearTarget = function ( renderTarget, color, depth, stencil ) {
-
-		this.setRenderTarget( renderTarget );
-		this.clear( color, depth, stencil );
-
-	};
-
 	//
 
 	this.dispose = function () {
@@ -35202,6 +35075,148 @@ PointLight.prototype = Object.assign( Object.create( Light.prototype ), {
 
 } );
 
+/**
+ * @author alteredq / http://alteredqualia.com/
+ * @author arose / http://github.com/arose
+ */
+
+function OrthographicCamera( left, right, top, bottom, near, far ) {
+
+	Camera.call( this );
+
+	this.type = 'OrthographicCamera';
+
+	this.zoom = 1;
+	this.view = null;
+
+	this.left = left;
+	this.right = right;
+	this.top = top;
+	this.bottom = bottom;
+
+	this.near = ( near !== undefined ) ? near : 0.1;
+	this.far = ( far !== undefined ) ? far : 2000;
+
+	this.updateProjectionMatrix();
+
+}
+
+OrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {
+
+	constructor: OrthographicCamera,
+
+	isOrthographicCamera: true,
+
+	copy: function ( source, recursive ) {
+
+		Camera.prototype.copy.call( this, source, recursive );
+
+		this.left = source.left;
+		this.right = source.right;
+		this.top = source.top;
+		this.bottom = source.bottom;
+		this.near = source.near;
+		this.far = source.far;
+
+		this.zoom = source.zoom;
+		this.view = source.view === null ? null : Object.assign( {}, source.view );
+
+		return this;
+
+	},
+
+	setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {
+
+		if ( this.view === null ) {
+
+			this.view = {
+				enabled: true,
+				fullWidth: 1,
+				fullHeight: 1,
+				offsetX: 0,
+				offsetY: 0,
+				width: 1,
+				height: 1
+			};
+
+		}
+
+		this.view.enabled = true;
+		this.view.fullWidth = fullWidth;
+		this.view.fullHeight = fullHeight;
+		this.view.offsetX = x;
+		this.view.offsetY = y;
+		this.view.width = width;
+		this.view.height = height;
+
+		this.updateProjectionMatrix();
+
+	},
+
+	clearViewOffset: function () {
+
+		if ( this.view !== null ) {
+
+			this.view.enabled = false;
+
+		}
+
+		this.updateProjectionMatrix();
+
+	},
+
+	updateProjectionMatrix: function () {
+
+		var dx = ( this.right - this.left ) / ( 2 * this.zoom );
+		var dy = ( this.top - this.bottom ) / ( 2 * this.zoom );
+		var cx = ( this.right + this.left ) / 2;
+		var cy = ( this.top + this.bottom ) / 2;
+
+		var left = cx - dx;
+		var right = cx + dx;
+		var top = cy + dy;
+		var bottom = cy - dy;
+
+		if ( this.view !== null && this.view.enabled ) {
+
+			var zoomW = this.zoom / ( this.view.width / this.view.fullWidth );
+			var zoomH = this.zoom / ( this.view.height / this.view.fullHeight );
+			var scaleW = ( this.right - this.left ) / this.view.width;
+			var scaleH = ( this.top - this.bottom ) / this.view.height;
+
+			left += scaleW * ( this.view.offsetX / zoomW );
+			right = left + scaleW * ( this.view.width / zoomW );
+			top -= scaleH * ( this.view.offsetY / zoomH );
+			bottom = top - scaleH * ( this.view.height / zoomH );
+
+		}
+
+		this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );
+
+		this.projectionMatrixInverse.getInverse( this.projectionMatrix );
+
+	},
+
+	toJSON: function ( meta ) {
+
+		var data = Object3D.prototype.toJSON.call( this, meta );
+
+		data.object.zoom = this.zoom;
+		data.object.left = this.left;
+		data.object.right = this.right;
+		data.object.top = this.top;
+		data.object.bottom = this.bottom;
+		data.object.near = this.near;
+		data.object.far = this.far;
+
+		if ( this.view !== null ) data.object.view = Object.assign( {}, this.view );
+
+		return data;
+
+	}
+
+} );
+
 /**
  * @author mrdoob / http://mrdoob.com/
  */
@@ -47002,6 +47017,14 @@ Object.defineProperties( ShaderMaterial.prototype, {
 
 Object.assign( WebGLRenderer.prototype, {
 
+	clearTarget: function ( renderTarget, color, depth, stencil ) {
+
+		console.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' );
+		this.setRenderTarget( renderTarget );
+		this.clear( color, depth, stencil );
+
+	},
+
 	animate: function ( callback ) {
 
 		console.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );

+ 0 - 11
docs/api/en/renderers/WebGLRenderer.html

@@ -302,17 +302,6 @@
 		<h3>[method:null clearStencil]( )</h3>
 		<p>Clear the stencil buffers. Equivalent to calling [page:WebGLRenderer.clear .clear]( false, false, true ).</p>
 
-		<h3>[method:null clearTarget]([param:WebGLRenderTarget renderTarget], [param:boolean color], [param:boolean depth], [param:boolean stencil])</h3>
-		<p>
-		renderTarget -- The [page:WebGLRenderTarget renderTarget] that needs to be cleared.<br />
-		color -- If set, then the color gets cleared. <br />
-		depth -- If set, then the depth gets cleared. <br />
-		stencil -- If set, then the stencil gets cleared.
-		</p>
-		<p>
-		This method clears a rendertarget. To do this, it activates the rendertarget.
-		</p>
-
 		<h3>[method:null compile]( [param:Scene scene], [param:Camera camera] )</h3>
 		<p>Compiles all materials in the scene with the camera. This is useful to precompile shaders before the first rendering.</p>
 

+ 46 - 0
docs/api/zh/Polyfills.html

@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+
+		<h1>Polyfills</h1>
+
+		<p class="desc">Three.js includes polyfills for the following functions and constants.</p>
+
+		<h3>[page:Number.EPSILON Number.EPSILON]</h3>
+		<p>
+			 The difference between one and the smallest value greater than one that can be represented as a Number.
+			 [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON MDN reference].
+		</p>
+
+		<h3>[page:Math.sign Math.sign]( [page:Number x] )</h3>
+		<p>
+			If the argument is a positive number, negative number, positive zero or negative zero,
+			the function will return 1, -1, 0 or -0 respectively. Otherwise, NaN is returned.
+			[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign MDN reference].
+		</p>
+
+		<h3>[page:Function.prototype.name Function.prototype.name]( [page:Number x] )</h3>
+		<p>
+			Returns the name of a function, or (before ES6 implementations) an empty string for anonymous functions.
+			[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name MDN reference].
+		</p>
+
+		<h3>[page:Object.assign Object.assign]( [page:Object target], [page:Object ...sources] )</h3>
+		<p>
+			The Object.assign() method is used to copy the values of all enumerable own properties from one or more source objects to a target object.
+			It will return the target object.
+			[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign MDN reference].
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/polyfills.js src/polyfills.js]
+	</body>
+</html>

+ 48 - 0
docs/api/zh/Template.html

@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Geometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">todo</p>
+
+
+		<h2>Example</h2>
+
+		<code>todo</code>
+
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Number todo])</h3>
+		<p></p>
+
+
+		<h2>Properties</h2>
+
+		<h3>[property:Number todo]</h3>
+		<p>
+		todo
+		</p>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null todo]()</h3>
+		<p>todo</p>
+		<p>todo</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 362 - 0
docs/api/zh/animation/AnimationAction.html

@@ -0,0 +1,362 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+			AnimationActions schedule the performance of the animations which are stored in
+			[page:AnimationClip AnimationClips].<br /><br />
+
+			Note: Most of AnimationAction's methods can be chained.<br /><br />
+
+			For an overview of the different elements of the three.js animation system see the
+			"Animation System" article in the "Next Steps" section of the manual.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:AnimationMixer mixer], [param:AnimationClip clip], [param:Object3D localRoot] )</h3>
+		<p>
+			[page:AnimationMixer mixer] - the *AnimationMixer* that is controlled by this action.<br />
+			[page:AnimationClip clip] - the *AnimationClip* that holds the animation data for this action.<br />
+			[page:Object3D localRoot] - the root object on which this action is performed.<br /><br />
+
+			Note: Instead of calling this constructor directly you should instantiate an AnimationAction with
+			[page:AnimationMixer.clipAction] since this method provides caching for better performance.
+		</p>
+
+
+		<h2>Properties</h2>
+
+
+		<h3>[property:Boolean clampWhenFinished]</h3>
+		<p>
+			If *clampWhenFinished* is set to true the animation will automatically be [page:.paused paused]
+			on its last frame.<br /><br />
+
+			If *clampWhenFinished* is set to false, [page:.enabled enabled] will automatically be switched
+			to false when the last loop of the action has finished, so that this action has no further
+			impact.<br /><br />
+
+			Default is false.<br /><br />
+
+			Note: *clampWhenFinished* has no impact if the action is interrupted (it has only an effect if
+			its last loop has really finished).
+		</p>
+
+		<h3>[property:Boolean enabled]</h3>
+		<p>
+			Setting *enabled* to *false* disables this action, so that it has no impact. Default is *true*.<br /><br />
+
+			When the action is re-enabled, the animation continues from its current [page:.time time]
+			(setting *enabled* to *false* doesn't reset the action).<br /><br />
+
+			Note: Setting *enabled* to *true* doesn’t automatically restart the animation. Setting *enabled*
+			to *true* will only restart the animation immediately if the following condition is fulfilled:
+			[page:.paused paused] is *false*, this action has not been deactivated in the meantime (by
+			executing a [page:.stop stop] or [page:.reset reset] command), and neither [page:.weight weight]
+			nor [page:.timeScale timeScale] is 0.
+		</p>
+
+		<h3>[property:Number loop]</h3>
+		<p>
+			The looping mode (can be changed with [page:.setLoop setLoop]). Default is
+			[page:Animation THREE.LoopRepeat] (with an infinite number of [page:.repetitions repetitions])<br /><br />
+
+			Must be one of these constants:<br /><br />
+			[page:Animation THREE.LoopOnce] - playing the clip once,<br />
+			[page:Animation THREE.LoopRepeat] - playing the clip with the choosen number of *repetitions*,
+			each time jumping from the end of the clip directly to its beginning,<br />
+			[page:Animation THREE.LoopPingPong] - playing the clip with the choosen number of *repetitions*,
+			alternately playing forward and backward.
+		</p>
+
+		<h3>[property:Boolean paused]</h3>
+		<p>
+			Setting *paused* to *true* pauses the execution of the action by setting the effective time scale
+			to 0. Default is *false*.<br /><br />
+		</p>
+
+		<h3>[property:Number repetitions]</h3>
+		<p>
+			The number of repetitions of the performed [page:AnimationClip] over the course of this action.
+			Can be set via [page:.setLoop setLoop]. Default is *Infinity*.<br /><br />
+			Setting this number has no effect, if the [page:.loop loop mode] is set to
+			[page:Animation THREE.LoopOnce].
+		</p>
+
+		<h3>[property:Number time]</h3>
+		<p>
+			The local time of this action (in seconds, starting with 0).<br /><br />
+
+			The value gets clamped or wrapped to 0...clip.duration (according to the loop state). It can be
+			scaled relativly to the global mixer time by changing [page:.timeScale timeScale] (using
+			[page:.setEffectiveTimeScale setEffectiveTimeScale] or [page:.setDuration setDuration]).<br />
+		</p>
+
+		<h3>[property:Number timeScale]</h3>
+		<p>
+			Scaling factor for the [page:.time time]. A value of 0 causes the animation to pause. Negative
+			values cause the animation to play backwards. Default is 1.<br /><br />
+			Properties/methods concerning *timeScale* (respectively *time*) are:
+			[page:.getEffectiveTimeScale getEffectiveTimeScale],
+			[page:.halt halt],
+			[page:.paused paused],
+			[page:.setDuration setDuration],
+			[page:.setEffectiveTimeScale setEffectiveTimeScale],
+			[page:.stopWarping stopWarping],
+			[page:.syncWith syncWith],
+			[page:.warp warp].
+		</p>
+
+		<h3>[property:Number weight]</h3>
+		<p>
+			The degree of influence of this action (in the interval [0, 1]). Values between 0 (no impact)
+			and 1 (full impact) can be used to blend between several actions. Default is 1. <br /><br />
+			Properties/methods concerning  *weight* are:
+			[page:.crossFadeFrom crossFadeFrom],
+			[page:.crossFadeTo crossFadeTo],
+			[page:.enabled enabled],
+			[page:.fadeIn fadeIn],
+			[page:.fadeOut fadeOut],
+			[page:.getEffectiveWeight getEffectiveWeight],
+			[page:.setEffectiveWeight setEffectiveWeight],
+			[page:.stopFading stopFading].
+		</p>
+
+		<h3>[property:Boolean zeroSlopeAtEnd]</h3>
+		<p>
+			Enables smooth interpolation without separate clips for start, loop and end. Default is *true*.
+		</p>
+
+		<h3>[property:Boolean zeroSlopeAtStart]</h3>
+		<p>
+			Enables smooth interpolation without separate clips for start, loop and end. Default is *true*.
+		</p>
+
+
+		<h2>Methods</h2>
+
+
+		<h3>[method:AnimationAction crossFadeFrom]( [param:AnimationAction fadeOutAction], [param:Number durationInSeconds], [param:Boolean warpBoolean] )</h3>
+		<p>
+			Causes this action to [page:.fadeIn fade in], fading out another action simultaneously, within
+			the passed time interval. This method can be chained.<br /><br />
+
+			If warpBoolean is true, additional [page:.warp warping] (gradually changes of the time scales)
+			will be applied.<br /><br />
+
+			Note: Like with *fadeIn*/*fadeOut*, the fading starts/ends with a weight of 1.
+
+		</p>
+
+		<h3>[method:AnimationAction crossFadeTo]( [param:AnimationAction fadeInAction], [param:Number durationInSeconds], [param:Boolean warpBoolean] )</h3>
+		<p>
+			Causes this action to [page:.fadeOut fade out], fading in another action simultaneously, within
+			the passed time interval. This method can be chained.<br /><br />
+			If warpBoolean is true, additional [page:.warp warping] (gradually changes of the time scales)
+			will be applied.<br /><br />
+
+			Note: Like with *fadeIn*/*fadeOut*, the fading starts/ends with a weight of 1.
+		</p>
+
+		<h3>[method:AnimationAction fadeIn]( [param:Number durationInSeconds] )</h3>
+		<p>
+			Increases the [page:.weight weight] of this action gradually from 0 to 1, within the passed time
+			interval. This method can be chained.
+		</p>
+
+		<h3>[method:AnimationAction fadeOut]( [param:Number durationInSeconds] )</h3>
+		<p>
+			Decreases the [page:.weight weight] of this action gradually from 1 to 0, within the passed time
+			interval. This method can be chained.
+		</p>
+
+		<h3>[method:Number getEffectiveTimeScale]()</h3>
+		<p>
+			Returns the effective time scale (considering the current states of warping and
+			[page:.paused paused]).
+		</p>
+
+		<h3>[method:number getEffectiveWeight]()</h3>
+		<p>
+			Returns the effective weight (considering the current states of fading and
+			[page:.enabled enabled]).
+		</p>
+
+		<h3>[method:AnimationClip getClip]()</h3>
+		<p>
+			Returns the clip which holds the animation data for this action.
+		</p>
+
+		<h3>[method:AnimationMixer getMixer]()</h3>
+		<p>
+			Returns the mixer which is responsible for playing this action.
+		</p>
+
+		<h3>[method:Object3D getRoot]()</h3>
+		<p>
+			Returns the root object on which this action is performed.
+		</p>
+
+		<h3>[method:AnimationAction halt]( [param:Number durationInSeconds] )</h3>
+		<p>
+			Decelerates this animation's speed to 0 by decreasing [page:.timeScale timeScale] gradually
+			(starting from its current value), within the passed time interval. This method can be chained.
+		</p>
+
+		<h3>[method:Boolean isRunning]()</h3>
+		<p>
+			Returns true if the action’s [page:.time time] is currently running.<br /><br />
+
+			In addition to being activated in the mixer (see [page:.isScheduled isScheduled]) the following conditions must be fulfilled:
+			[page:.paused paused] is equal to false, [page:.enabled enabled] is equal to true,
+			[page:.timeScale timeScale] is different from 0, and there is no scheduling for a delayed start
+			([page:.startAt startAt]).<br /><br />
+
+			Note: *isRunning* being true doesn’t necessarily mean that the animation can actually be seen.
+			This is only the case, if [page:.weight weight] is additionally set to a non-zero value.
+		</p>
+
+		<h3>[method:Boolean isScheduled]()</h3>
+		<p>
+			Returns true, if this action is activated in the mixer.<br /><br />
+			Note: This doesn’t necessarily mean that the animation is actually running (compare the additional
+			conditions for [page:.isRunning isRunning]).
+		</p>
+
+		<h3>[method:AnimationAction play]()</h3>
+		<p>
+			Tells the mixer to activate the action. This method can be chained.<br /><br />
+
+			Note: Activating this action doesn’t necessarily mean that the animation starts immediately:
+			If the action had already finished before (by reaching the end of its last loop), or if a time
+			for a delayed start has been set (via [page:.startAt startAt]), a [page:.reset reset] must be
+			executed first. Some other settings ([page:.paused paused]=true, [page:.enabled enabled]=false,
+			[page:.weight weight]=0, [page:.timeScale timeScale]=0) can prevent the animation from playing,
+			too.
+		</p>
+
+		<h3>[method:AnimationAction reset]()</h3>
+		<p>
+			Resets the action. This method can be chained.<br /><br />
+
+			This method sets [page:.paused paused] to false, [page:.enabled enabled] to true,
+			[page:.time time] to 0, interrupts any scheduled fading and warping, and removes the internal
+			loop count and scheduling for delayed starting.<br /><br />
+
+			Note: .*reset* is always called by [page:.stop stop], but .*reset* doesn’t call .*stop* itself.
+			This means: If you want both, resetting and stopping, don’t call .*reset*; call .*stop* instead.
+		</p>
+
+		<h3>[method:AnimationAction setDuration]( [param:Number durationInSeconds] )</h3>
+		<p>
+			Sets the duration for a single loop of this action (by adjusting [page:.timeScale timeScale]
+			and stopping any scheduled warping). This method can be chained.
+		</p>
+
+		<h3>[method:AnimationAction setEffectiveTimeScale]( [param:Number timeScale] )</h3>
+		<p>
+			Sets the [page:.timeScale timeScale] and stops any scheduled warping. This method can be chained.<br /><br />
+
+			If [page:.paused paused] is false, the effective time scale (an internal property) will also be set
+			to this value; otherwise the effective time scale (directly affecting the animation at
+			this moment) will be set to 0.<br /><br />
+
+			Note: .*paused* will not be switched to *true* automatically, if .*timeScale* is set to 0 by
+			this method.
+		</p>
+
+		<h3>[method:AnimationAction setEffectiveWeight]( [param:Number weight] )</h3>
+		<p>
+			Sets the [page:.weight weight] and stops any scheduled fading. This method can be chained.<br /><br />
+
+			If [page:.enabled enabled] is true, the effective weight (an internal property) will also be set
+			to this value; otherwise the effective weight (directly affecting the animation at this moment)
+			will be set to 0.<br /><br />
+
+			Note: .*enabled* will not be switched to *false* automatically, if .*weight* is set to 0 by
+			this method.
+		</p>
+
+		<h3>[method:AnimationAction setLoop]( [param:Number loopMode], [param:Number repetitions] )</h3>
+		<p>
+			Sets the [page:.loop loop mode] and the number of [page:.repetitions repetitions]. This method
+			can be chained.
+		</p>
+
+		<h3>[method:AnimationAction startAt]( [param:Number startTimeInSeconds] )</h3>
+		<p>
+			Defines the time for a delayed start (usually passed as [page:AnimationMixer.time] +
+			deltaTimeInSeconds). This method can be chained.<br /><br />
+
+			Note: The animation will only start at the given time, if .*startAt* is chained with
+			[page:.play play], or if the action has already been activated in the mixer (by a previous
+			call of .*play*, without stopping or resetting it in the meantime).
+		</p>
+
+		<h3>[method:AnimationAction stop]()</h3>
+		<p>
+			Tells the mixer to deactivate this action. This method can be chained.<br /><br />
+
+			The action will be immediately stopped and completely [page:.reset reset].<br /><br />
+
+			Note: You can stop all active actions on the same mixer in one go via
+			[page:AnimationMixer.stopAllAction mixer.stopAllAction].
+		</p>
+
+		<h3>[method:AnimationAction stopFading]()</h3>
+		<p>
+			Stops any scheduled [page:.fadeIn fading] which is applied to this action. This method can be
+			chained.
+		</p>
+
+		<h3>[method:AnimationAction stopWarping]()</h3>
+		<p>
+			Stops any scheduled [page:.warp warping] which is applied to this action. This method can be
+			chained.
+		</p>
+
+		<h3>[method:AnimationAction syncWith]( [param:AnimationAction otherAction] )</h3>
+		<p>
+			Synchronizes this action with the passed other action. This method can be chained.<br /><br />
+
+			Synchronizing is done by setting this action’s [page:.time time] and [page:.timeScale timeScale] values
+			to the corresponding values of the other action (stopping any scheduled warping).<br /><br />
+
+			Note: Future changes of the other action's *time* and *timeScale* will not be detected.
+		</p>
+
+		<h3>[method:AnimationAction warp]( [param:Number startTimeScale], [param:Number endTimeScale], [param:Number durationInSeconds] )</h3>
+		<p>
+			Changes the playback speed, within the passed time interval, by modifying
+			[page:.timeScale timeScale] gradually from *startTimeScale* to *endTimeScale*. This method can
+			be chained.
+		</p>
+
+
+		<h2>Events</h2>
+
+
+		<p class="desc">
+			There are two events indicating when a single loop of the action respectively the entire action has finished. You can react to them with:
+		</p>
+		<code>
+		mixer.addEventListener( 'loop', function( e ) { …} ); // properties of e: type, action and loopDelta
+		mixer.addEventListener( 'finished', function( e ) { …} ); // properties of e: type, action and direction
+		</code>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 141 - 0
docs/api/zh/animation/AnimationClip.html

@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+			An AnimationClip is a reusable set of keyframe tracks which represent an animation.<br /><br />
+
+			For an overview of the different elements of the three.js animation system see the
+			"Animation System" article in the "Next Steps" section of the manual.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:String name], [param:Number duration], [param:Array tracks] )</h3>
+		<p>
+			[page:String name] - a name for this clip.<br />
+			[page:Number duration] - the duration of this clip (in seconds). If a negative value is passed,
+			the duration will be calculated from the passed *tracks* array.<br />
+			[page:Array tracks] - an array of [page:KeyframeTrack KeyframeTracks].<br /><br />
+
+			Note: Instead of instantiating an AnimationClip directly with the constructor, you can use one
+			of its static methods to create AnimationClips: from JSON ([page:.parse parse]), from morph
+			target sequences ([page:.CreateFromMorphTargetSequence CreateFromMorphTargetSequence],
+			[page:.CreateClipsFromMorphTargetSequences CreateClipsFromMorphTargetSequences]) or from
+			animation hierarchies ([page:.parseAnimation parseAnimation]) - if your model doesn't already
+			hold AnimationClips in its geometry's animations array.
+		</p>
+
+
+		<h2>Properties</h2>
+
+
+		<h3>[property:Number duration]</h3>
+		<p>
+			The duration of this clip (in seconds). This can be calculated from the [page:.tracks tracks]
+			array via [page:.resetDuration resetDuration].
+		</p>
+
+		<h3>[property:String name]</h3>
+		<p>
+			A name for this clip. A certain clip can be searched via [page:.findByName findByName].
+		</p>
+
+		<h3>[property:Array tracks]</h3>
+		<p>
+			An array containing a [page:KeyframeTrack] for each property that are animated by this clip.
+		</p>
+
+		<h3>[property:String uuid]</h3>
+		<p>
+			The [link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] of this clip instance.
+			It gets automatically assigned and shouldn't be edited.
+		</p>
+
+
+		<h2>Methods</h2>
+
+
+		<h3>[method:this optimize]()</h3>
+		<p>
+			Optimizes each track by removing equivalent sequential keys (which are common in morph target
+			sequences).
+		</p>
+
+		<h3>[method:this resetDuration]()</h3>
+		<p>
+			Sets the [page:.duration duration] of the clip to the duration of its longest
+			[page:KeyframeTrack].
+		</p>
+
+		<h3>[method:this trim]()</h3>
+		<p>
+			Trims all tracks to the clip's duration.
+		</p>
+
+		<h3>[method:Boolean validate]()</h3>
+		<p>
+			Performs minimal validation on each track in the clip. Returns true if all tracks are valid.
+		</p>
+
+
+		<h2>Static Methods</h2>
+
+
+		<h3>[method:Array CreateClipsFromMorphTargetSequences]( [param:String name], [param:Array morphTargetSequence], [param:Number fps], [param:Boolean noLoop] )</h3>
+		<p>
+			Returns an array of new AnimationClips created from the [page:Geometry.morphTargets morph
+			target sequences] of a geometry, trying to sort morph target names into animation-group-based
+			patterns like "Walk_001, Walk_002, Run_001, Run_002 ..."<br /><br />
+
+			This method is called by the [page:JSONLoader] internally, and it uses
+			[page:.CreateFromMorphTargetSequence CreateFromMorphTargetSequence].
+		</p>
+
+		<h3>[method:AnimationClip CreateFromMorphTargetSequence]( [param:String name], [param:Array morphTargetSequence], [param:Number fps], [param:Boolean noLoop] )</h3>
+		<p>
+			Returns a new AnimationClip from the passed [page:Geometry.morphTargets morph targets array]
+			of a geometry, taking a name and the number of frames per second.<br /><br />
+
+			Note: The fps parameter is required, but the animation speed can be overridden in an
+			*AnimationAction* via [page:AnimationAction.setDuration animationAction.setDuration].
+		</p>
+
+		<h3>[method:AnimationClip findByName]( [param:Object objectOrClipArray], [param:String name] )</h3>
+		<p>
+			Searches for an AnimationClip by name, taking as its first parameter either an array of
+			AnimationClips, or a mesh or geometry that contains an array named "animations".
+		</p>
+
+		<h3>[method:AnimationClip parse]( [param:Object json] )</h3>
+		<p>
+			Parses a JSON representation of a clip and returns an AnimationClip.
+		</p>
+
+		<h3>[method:AnimationClip parseAnimation]( [param:Object animation], [param:Array bones] )</h3>
+		<p>
+			Parses the animation.hierarchy format and returns an AnimationClip.
+		</p>
+
+		<h3>[method:Object toJSON]( [param:AnimationClip clip] )</h3>
+		<p>
+			Takes an AnimationClip and returns a JSON object.
+		</p>
+
+
+		<h2>Source</h2>
+
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 110 - 0
docs/api/zh/animation/AnimationMixer.html

@@ -0,0 +1,110 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+			The AnimationMixer is a player for animations on a particular object in the scene. When
+			multiple objects in the scene are animated independently, one AnimationMixer may be used for
+			each object.<br /><br />
+
+			For an overview of the different elements of the three.js animation system see the
+			"Animation System" article in the "Next Steps" section of the manual.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:Object3D rootObject] )</h3>
+		<p>
+			[page:Object3D rootObject] - the object whose animations shall be played by this mixer.<br />
+		</p>
+
+
+		<h2>Properties</h2>
+
+
+		<h3>[property:Number time]</h3>
+		<p>
+			The global mixer time (in seconds; starting with 0 on the mixer's creation).
+		</p>
+
+		<h3>[property:Number timeScale]</h3>
+		<p>
+			A scaling factor for the global [page:.time mixer time].<br /><br />
+
+			Note: Setting the mixer's timeScale to 0 and later back to 1 is a possibility to pause/unpause
+			all actions that are controlled by this mixer.
+		</p>
+
+
+		<h2>Methods</h2>
+
+
+		<h3>[method:AnimationAction clipAction]([param:AnimationClip clip], [param:Object3D optionalRoot])</h3>
+		<p>
+			Returns an [page:AnimationAction] for the passed clip, optionally using a root object different
+			from the mixer's default root. The first parameter can be either an [page:AnimationClip] object
+			or the name of an AnimationClip.<br /><br />
+
+			If an action fitting the clip and root parameters doesn't yet exist, it will be created by
+			this method. Calling this method several times with the same clip and root parameters always
+			returns the same clip instance.
+		</p>
+
+		<h3>[method:AnimationAction existingAction]([param:AnimationClip clip], [param:Object3D optionalRoot])</h3>
+		<p>
+			Returns an existing [page:AnimationAction] for the passed clip, optionally using a root object
+			different from the mixer's default root.<br /><br />
+
+			The first parameter can be either an [page:AnimationClip] object or the name of an AnimationClip.
+		</p>
+
+		<h3>[method:Object3D getRoot]()</h3>
+		<p>
+			Returns this mixer's root object.
+		</p>
+
+		<h3>[method:AnimationMixer stopAllAction]()</h3>
+		<p>
+			Deactivates all previously scheduled actions on this mixer.
+		</p>
+
+		<h3>[method:AnimationMixer update]([param:Number deltaTimeInSeconds]) </h3>
+		<p>
+			Advances the global mixer time and updates the animation.<br /><br />
+
+			This is usually done in the render loop, passing [page:Clock.getDelta clock.getDelta] scaled by the mixer's [page:.timeScale timeScale]).
+		</p>
+
+		<h3>[method:null uncacheClip]([param:AnimationClip clip])</h3>
+
+		<p>
+			Deallocates all memory resources for a clip.
+		</p>
+
+		<h3>[method:null uncacheRoot]([param:Object3D root]) </h3>
+		<p>
+			Deallocates all memory resources for a root object.
+		</p>
+
+		<h3>[method:null uncacheAction]([param:AnimationClip clip], [param:Object3D optionalRoot])</h3>
+		<p>
+			Deallocates all memory resources for an action.
+		</p>
+
+
+		<h2>Source</h2>
+
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 85 - 0
docs/api/zh/animation/AnimationObjectGroup.html

@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">A group of objects that receives a shared animation state.<br /><br />
+
+			For an overview of the different elements of the three.js animation system see the
+			"Animation System" article in the "Next Steps" section of the manual.
+		</p>
+
+		<h2>Usage:</h2>
+
+		<p class="desc">
+			Add objects you would otherwise pass as 'root' to the constructor or the [page:AnimationMixer.clipAction clipAction]
+			method of [page:AnimationMixer AnimationMixer] and instead pass this object as 'root'.<br /><br />
+
+			Note that objects of this class appear as one object to the mixer,
+			so cache control of the individual objects must be done	on the group.
+		</p>
+
+
+		<h2>Limitations</h2>
+		<p class="desc">
+			The animated properties must be compatible among all objects in the group.<br /><br />
+
+			A single property can either be controlled through a target group or directly, but not both.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:object obj1], [param:object obj2], [param:object obj3], ... )</h3>
+		[page:object obj] - an abitrary number of meshes that share the same animation state.<br />
+
+
+		<h2>Properties</h2>
+
+
+		<h3>[property:object stats]</h3>
+		<p>
+			An object that contains some informations of this *AnimationObjectGroup* (total number, number
+			in use, number of bindings per object)
+		</p>
+
+		<h3>[property:String uuid]</h3>
+		<p>
+			The [link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] of this
+			*AnimationObjectGroup*. It gets automatically assigned and shouldn't be edited.
+		</p>
+
+
+		<h2>Methods</h2>
+
+
+		<h3>[method:null add]( [param:object obj1], [param:object obj2], [param:object obj3], ... )</h3>
+		<p>
+			Adds an arbitrary number of objects to this *AnimationObjectGroup*.
+		</p>
+
+		<h3>[method:null remove]( [param:object obj1], [param:object obj2], [param:object obj3], ... )</h3>
+		<p>
+			Removes an arbitrary number of objects from this *AnimationObjectGroup*.
+		</p>
+
+		<h3>[method:null uncache]( [param:object obj1], [param:object obj2], [param:object obj3], ... )</h3>
+		<p>
+			Deallocates all memory resources for the passed objects of this *AnimationObjectGroup*.
+		</p>
+
+
+		<h2>Source</h2>
+
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 57 - 0
docs/api/zh/animation/AnimationUtils.html

@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+		An object with various functions to assist with animations, used internally.
+		</p>
+
+
+		<h2>Methods</h2>
+
+
+		<h3>[method:Array arraySlice]( array, from, to )</h3>
+		<p>
+		This is the same as  Array.prototype.slice, but also works on typed arrays.
+		</p>
+
+		<h3>[method:Array convertArray]( array, type, forceClone )</h3>
+		<p>
+		Converts an array to a specific type.
+		</p>
+
+		<h3>[method:Array flattenJSON]( jsonKeys, times, values, valuePropertyName  )</h3>
+		<p>
+		Used for parsing AOS keyframe formats.
+		</p>
+
+		<h3>[method:Array getKeyframeOrder]( times )</h3>
+		<p>
+		Returns an array by which times and values can be sorted.
+		</p>
+
+		<h3>[method:Boolean isTypedArray]( object )</h3>
+		<p>
+		Returns *true* if the object is a typed array.
+		</p>
+
+		<h3>[method:Array sortedArray]( values, stride, order )</h3>
+		<p>
+		Sorts the array previously returned by [page:AnimationUtils.getKeyframeOrder getKeyframeOrder].
+		</p>
+
+
+		<h2>Source</h2>
+
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 264 - 0
docs/api/zh/animation/KeyframeTrack.html

@@ -0,0 +1,264 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			A KeyframeTrack is a timed sequence of [link:https://en.wikipedia.org/wiki/Key_frame keyframes],
+			which are composed of lists of times and related values, and which are used to animate a
+			specific property of an object.
+		</p>
+
+		<p>
+			For an overview of the different elements of the three.js animation system see the
+			"Animation System" article in the "Next Steps" section of the manual.
+		</p>
+
+		<p>
+			In contrast to the animation hierarchy of the
+			[link:https://github.com/mrdoob/three.js/wiki/JSON-Model-format-3 JSON model format] a
+			*KeyframeTrack* doesn't store its single keyframes as objects in a "keys" array (holding the
+			times and the values for each frame together in one place).
+		</p>
+
+		<p>
+			Instead of this there are always two arrays in a *KeyframeTrack*: the [page:.times times] array
+			stores the time values for all keyframes of this track in sequential order, and the
+			[page:.values values] array contains the corresponding changing values of the animated property.
+		</p>
+
+		<p>
+			A single value, belonging to a certain point of time, can not only be a simple number, but (for
+			example) a vector (if a position is animated) or a quaternion (if a rotation is animated). For
+			this reason the values array (which is a flat array, too) might be three or four times as long as the
+			times array.
+		</p>
+
+		<p>
+			Corresponding to the different possible types of animated values there are several subclasses of
+			*KeyframeTrack*, inheriting the most properties and methods:
+		</p>
+
+		<ul>
+			<li>[page:BooleanKeyframeTrack]</li>
+			<li>[page:ColorKeyframeTrack]</li>
+			<li>[page:NumberKeyframeTrack]</li>
+			<li>[page:QuaternionKeyframeTrack]</li>
+			<li>[page:StringKeyframeTrack]</li>
+			<li>[page:VectorKeyframeTrack]</li>
+		</ul>
+
+		<p>
+			Some examples of how to manually create [page:AnimationClip AnimationClips] with different sorts
+			of KeyframeTracks can be found in the [link:https://threejs.org/examples/js/AnimationClipCreator.js]
+			file.
+		</p>
+
+		<p>
+			Since explicit values are only specified for the discrete points of time stored in the times array,
+			all values in between have to be interpolated.
+		</p>
+
+		<p>
+			The track's name is important for the connection of this track with a specific property of the
+			animated node (done by [page:PropertyBinding]).
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:String name], [param:Array times], [param:Array values], [param:Constant interpolation] )</h3>
+		<p>
+			[page:String name] - the identifier for the *KeyframeTrack*.<br />
+			[page:Array times] - an array of keyframe times, converted internally to a
+			[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array].<br />
+			[page:Array values] - an array with the values related to the times array, converted internally to a
+			[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array].<br />
+			[page:Constant interpolation] - the type of interpolation to use. See
+			[page:Animation Animation Constants] for possible values. Default is [page:Animation InterpolateLinear].
+		</p>
+
+
+		<h2>Properties</h2>
+
+
+		<h3>[property:String name]</h3>
+		<p>
+			The track's name can refer to [page:Geometry.morphTargets morph targets] or
+			[page:SkinnedMesh bones] or possibly other values within an animated object. See
+			[page:PropertyBinding.parseTrackName] for the forms of strings that can be parsed for property
+			binding:
+		</p>
+
+		<p>
+			The name can specify the node either using its name or its uuid (although it needs to be in the
+			subtree of the scene graph node passed into the mixer). Or, if the track name starts with a dot,
+			the track applies to the root node that was passed into the mixer.
+		</p>
+
+		<p>
+			Usually after the node a property will be specified directly. But you can also specify a
+			subproperty, such as .rotation[x], if you just want to drive the X component of the rotation
+			via a float track.
+		</p>
+
+		<p>
+			You can also specify bones or multimaterials by using an object name, for example:
+			.bones[R_hand].scale; the red channel of the diffuse color of the fourth material in a
+			materials array - as a further example - can be accessed with .materials[3].diffuse[r].
+		</p>
+
+		<p>
+			PropertyBinding will also resolve morph target names, for example: .morphTargetInfluences[run].
+		</p>
+
+		<p>
+			Note: The track's name does not necessarily have to be unique. Multiple tracks can drive the same
+			property. The result should be based on a weighted blend between the multiple tracks according to
+			the weights of their respective actions.
+		</p>
+
+		<h3>[property:Float32Array times]</h3>
+		<p>
+			A [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array],
+			converted from the times array which is passed in the constructor.
+		</p>
+
+		<h3>[property:Float32Array values]</h3>
+		<p>
+			A [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array],
+			converted from the values array which is passed in the constructor.
+		</p>
+
+		<h3>[property:Constant DefaultInterpolation]</h3>
+		<p>
+			The default interpolation type: [page:Animation InterpolateLinear].
+		</p>
+
+		<h3>[property:Constant TimeBufferType ]</h3>
+		<p>
+			[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array],
+			the type of the buffer internally used for the times.
+		</p>
+
+		<h3>[property:Constant ValueBufferType ]</h3>
+		<p>
+			[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array],
+			the type of the buffer internally used for the values.
+		</p>
+
+
+		<h2>Methods</h2>
+
+
+		<h3>[method:null createInterpolant]()</h3>
+		<p>
+			Creates a [page:LinearInterpolant LinearInterpolant], [page:CubicInterpolant CubicInterpolant]
+			or [page:DiscreteInterpolant DiscreteInterpolant], depending on the value of the interpolation
+			parameter passed in the constructor.
+		</p>
+
+		<h3>[method:null getInterpolation]()</h3>
+		<p>
+			Returns the interpolation type.
+		</p>
+
+		<h3>[method:Number getValueSize]()</h3>
+		<p>
+			Returns the size of each value (that is the length of the [page:.values values] array divided
+			by the length of the [page:.times times] array).
+		</p>
+
+		<h3>[method:DiscreteInterpolant InterpolantFactoryMethodDiscrete]( [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array result] )</h3>
+		<p>
+			Creates a new [page:DiscreteInterpolant DiscreteInterpolant] from the
+			[page:KeyframeTrack.times times] and [page:KeyframeTrack.times values]. A Float32Array can be
+			passed which will receive the results. Otherwise a new array with the appropriate size will be
+			created automatically.
+		</p>
+
+		<h3>[method:null InterpolantFactoryMethodLinear]( [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array result] )</h3>
+		<p>
+			Creates a new [page:LinearInterpolant LinearInterpolant] from the
+			[page:KeyframeTrack.times times] and [page:KeyframeTrack.times values]. A Float32Array can be
+			passed which will receive the results. Otherwise a new array with the appropriate size will be
+			created automatically.
+		</p>
+
+		<h3>[method:null InterpolantFactoryMethodSmooth]( [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array result] )</h3>
+		<p>
+			Create a new [page:CubicInterpolant CubicInterpolant] from the
+			[page:KeyframeTrack.times times] and [page:KeyframeTrack.times values]. A Float32Array can be
+			passed which will receive the results. Otherwise a new array with the appropriate size will be
+			created automatically.
+		</p>
+
+		<h3>[method:this optimize]()</h3>
+		<p>
+			Removes equivalent sequential keys, which are common in morph target sequences.
+		</p>
+
+		<h3>[method:this scale]()</h3>
+		<p>
+			Scales all keyframe times by a factor.<br /><br />
+
+			Note: This is useful, for example, for conversions to a certain rate of frames per seconds (as it
+			is done internally by
+			[page:AnimationClip.CreateFromMorphTargetSequence animationClip.CreateFromMorphTargetSequence]).
+		</p>
+
+		<h3>[method:this setInterpolation]( [param:Constant interpolationType] )</h3>
+		<p>
+			Sets the interpolation type. See [page:Animation Animation Constants] for choices.
+		</p>
+
+		<h3>[method:this shift]( [param:Number timeOffsetInSeconds] )</h3>
+		<p>
+			Moves all keyframes either forward or backward in time.
+		</p>
+
+
+		<h3>[method:this trim]( [param:Number startTimeInSeconds], [param:Number endTimeInSeconds] )</h3>
+		<p>
+			Removes keyframes before *startTime* and after *endTime*,
+			without changing any values within the range [*startTime*, *endTime*].
+		</p>
+
+		<h3>[method:Boolean validate]()</h3>
+		<p>
+			Performs minimal validation on the tracks. Returns true if valid.
+		</p>
+
+		<p>
+			This method logs errors to the console, if a track is empty, if the [page:.valueSize value size] is not valid, if an item
+			in the [page:.times times] or [page:.values values] array is not a valid number or if the items in the *times* array are out of order.
+		</p>
+
+		<h2>Static Methods</h2>
+
+		<h3>[method:KeyframeTrack parse]( [param:JSON json] )</h3>
+		<p>
+		Parses a JSON object and returns a new keyframe track of the correct type.
+		</p>
+
+		<h3>[method:JSON toJSON]( [param:KeyframeTrack track] )</h3>
+		<p>
+		Converts the track to JSON.
+		</p>
+
+
+		<h2>Source</h2>
+
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 131 - 0
docs/api/zh/animation/PropertyBinding.html

@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+			This holds a reference to a real property in the scene graph; used internally.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:Object3D rootNode], path, parsedPath )</h3>
+		<p>
+			-- [page:Object3D rootNode]:
+			-- path
+			-- parsedPath (optional)
+
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Number path]</h3>
+		<p>
+
+		</p>
+
+		<h3>[property:Number parsedPath]</h3>
+		<p>
+
+		</p>
+
+		<h3>[property:Number node]</h3>
+		<p>
+
+		</p>
+
+		<h3>[property:Number rootNode]</h3>
+		<p>
+
+		</p>
+
+		<h3>[property:Object BindingType]</h3>
+		<p>
+
+		</p>
+
+		<h3>[property:Object Versioning]</h3>
+		<p>
+
+		</p>
+
+		<h3>[property:Array GetterByBindingType]</h3>
+		<p>
+
+		</p>
+
+		<h3>[property:Array SetterByBindingTypeAndVersioning]</h3>
+		<p>
+
+		</p>
+
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null getValue]( [param:Array targetArray], [param:Number offset] )</h3>
+		<p>
+		</p>
+
+		<h3>[method:null setValue]( [param:Array sourceArray], [param:Number offset] )</h3>
+		<p>
+		</p>
+
+		<h3>[method:null bind]( )</h3>
+		<p>
+			Create getter / setter pair for a property in the scene graph. Used internally by
+			[page:PropertyBinding.getValue getValue] and [page:PropertyBinding.setValue setValue].
+		</p>
+
+		<h3>[method:null unbind]( )</h3>
+		<p>
+			Unbind getter / setter pair for a property in the scene graph.
+		</p>
+
+		<h3>[method:Constructor Composite]( targetGroup, path, optionalParsedPath )</h3>
+		<p>
+			Create a new Composite PropertyBinding.
+		</p>
+
+		<h3>[method:Constructor create]( root, path, parsedPath )</h3>
+		<p>
+			Create a new Composite PropertyBinding (if root is an [page:AnimationObjectGroup]) or PropertyBinding.
+		</p>
+
+		<h3>[method:Constructor parseTrackName]( trackName )</h3>
+		<p>
+			Matches strings in the following forms:<br />
+			-- nodeName.property<br />
+			-- nodeName.property[accessor]<br />
+			-- nodeName.material.property[accessor]<br />
+			-- uuid.property[accessor]<br />
+			-- uuid.objectName[objectIndex].propertyName[propertyIndex]<br />
+			-- parentName/nodeName.property<br />
+			-- parentName/parentName/nodeName.property[index]<br />
+			-- .bone[Armature.DEF_cog].position<br />
+			-- scene:helium_balloon_model:helium_balloon_model.position
+		</p>
+
+		<h3>[method:Constructor findNode]( root, nodeName )</h3>
+		<p>
+			Find a node in a node tree or [page:Skeleton Skeleton].
+		</p>
+
+
+
+
+		<h2>Source</h2>
+
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 98 - 0
docs/api/zh/animation/PropertyMixer.html

@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+		Buffered scene graph property that allows weighted accumulation; used internally.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:PropertyBinding binding], [param:String typeName], [param:Number valueSize] )</h3>
+		<p>
+			-- binding <br />
+			-- typeName <br />
+			-- valueSize <br />
+		</p>
+
+
+		<h2>Properties</h2>
+
+
+		<h3>[property:PropertyBinding binding]</h3>
+		<p>
+
+		</p>
+
+		<h3>[property:TypedArray buffer]</h3>
+		<p>
+			Buffer with size [page:PropertyMixer valueSize] * 4. <br /><br />
+			This has the layout: [ incoming | accu0 | accu1 | orig ]<br /><br />
+			Interpolators can use .buffer as their .result and the data then goes to 'incoming'.
+			'accu0' and 'accu1' are used frame-interleaved for the cumulative result and
+			are compared to detect changes. 'orig' stores the original state of the property.
+		</p>
+
+		<h3>[property:Number cumulativeWeight]</h3>
+		<p>
+			Default is *0*.
+		</p>
+
+		<h3>[property:Number valueSize]</h3>
+		<p>
+
+		</p>
+
+		<h3>[property:Number referenceCount]</h3>
+		<p>
+			Default is *0*.
+		</p>
+
+		<h3>[property:Number useCount]</h3>
+		<p>
+			Default is *0*.
+		</p>
+
+
+		<h2>Methods</h2>
+
+
+		<h3>[method:null accumulate]( [param:Number accuIndex], [param:Number weight] )</h3>
+		<p>
+			Accumulate data in [page:PropertyMixer.buffer buffer][accuIndex] 'incoming' region into 'accu[i]'.<br />
+
+			If weight is *0* this does nothing.
+		</p>
+
+		<h3>[method:null apply]( [param:Number accuIndex] )</h3>
+		<p>
+			Apply the state of [page:PropertyMixer.buffer buffer] 'accu[i]' to the binding when accus differ.
+		</p>
+
+		<h3>[method:null saveOriginalState]( )</h3>
+		<p>
+			Remember the state of the bound property and copy it to both accus.
+		</p>
+
+		<h3>[method:null restoreOriginalState](  )</h3>
+		<p>
+			Apply the state previously taken via 'saveOriginalState' to the binding.
+		</p>
+
+
+		<h2>Source</h2>
+
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 78 - 0
docs/api/zh/animation/tracks/BooleanKeyframeTrack.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+
+		[page:KeyframeTrack] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			A Track of boolean keyframe values.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:String name], [param:Array times], [param:Array values] )</h3>
+		<p>
+			[page:String name] - (required) identifier for the KeyframeTrack.<br />
+			[page:Array times] - (required) array of keyframe times.<br />
+			[page:Array values] - values for the keyframes at the times specified.<br />
+		</p>
+
+
+		<h2>Properties</h2>
+
+
+		<p class="desc">
+			See [page:KeyframeTrack] for inherited properties.
+		</p>
+
+		<h3>[property:Constant DefaultInterpolation]</h3>
+		<p>
+			The default interpolation type to use, [page:Animation InterpolateDiscrete].
+		</p>
+
+		<h3>[property:Array ValueBufferType]</h3>
+		<p>
+			A normal Array (no Float32Array in this case, unlike *ValueBufferType* of [page:KeyframeTrack]).
+		</p>
+
+		<h3>[property:String ValueTypeName]</h3>
+		<p>
+			String 'bool'.
+		</p>
+
+
+		<h2>Methods</h2>
+
+
+		<p class="desc">
+			See [page:KeyframeTrack] for inherited methods.
+		</p>
+
+		<h3>[method:null InterpolantFactoryMethodLinear ]()</h3>
+		<p>
+			The value of this method here is 'undefined', as it does not make sense for discrete properties.
+		</p>
+
+		<h3>[method:null InterpolantFactoryMethodSmooth ]()</h3>
+		<p>
+			The value of this method here is 'undefined', as it does not make sense for discrete properties.
+		</p>
+
+
+		<h2>Source</h2>
+
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 62 - 0
docs/api/zh/animation/tracks/ColorKeyframeTrack.html

@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+
+		[page:KeyframeTrack] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			A Track of keyframe values that represent color changes.<br /><br />
+			The very basic implementation of this subclass has nothing special yet. However, this is the place
+			for color space parameterization.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:String name], [param:Array times], [param:Array values] )</h3>
+		<p>
+			[page:String name] - (required) identifier for the KeyframeTrack.<br />
+			[page:Array times] - (required) array of keyframe times.<br />
+			[page:Array values] - values for the keyframes at the times specified.<br />
+			[page:Constant interpolation] - the type of interpolation to use. See
+			[page:Animation Animation Constants] for possible values. Default is
+			[page:Animation InterpolateLinear].
+		</p>
+
+
+		<h2>Properties</h2>
+
+
+		<p class="desc">
+			See [page:KeyframeTrack] for inherited properties.
+		</p>
+
+		<h3>[property:String ValueTypeName]</h3>
+		<p>
+			String 'color'.
+		</p>
+
+
+		<h2>Methods</h2>
+
+
+		<p class="desc">
+			See [page:KeyframeTrack] for inherited methods.
+		</p>
+
+		<h2>Source</h2>
+
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 62 - 0
docs/api/zh/animation/tracks/NumberKeyframeTrack.html

@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+
+		[page:KeyframeTrack] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			A Track of numeric keyframe values.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:String name], [param:Array times], [param:Array values] )</h3>
+		<p>
+			[page:String name] - (required) identifier for the KeyframeTrack.<br />
+			[page:Array times] - (required) array of keyframe times.<br />
+			[page:Array values] - values for the keyframes at the times specified.<br />
+			[page:Constant interpolation] - the type of interpolation to use. See
+			[page:Animation Animation Constants] for possible values. Default is
+			[page:Animation InterpolateLinear].
+		</p>
+
+
+		<h2>Properties</h2>
+
+
+		<p class="desc">
+			See [page:KeyframeTrack] for inherited properties.
+		</p>
+
+
+		<h3>[property:String ValueTypeName]</h3>
+		<p>
+			String 'number'.
+		</p>
+
+
+		<h2>Methods</h2>
+
+
+		<p class="desc">
+			See [page:KeyframeTrack] for inherited methods.
+		</p>
+
+
+		<h2>Source</h2>
+
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 73 - 0
docs/api/zh/animation/tracks/QuaternionKeyframeTrack.html

@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+
+		[page:KeyframeTrack] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			A Track of quaternion keyframe values.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:String name], [param:Array times], [param:Array values] )</h3>
+		<p>
+			[page:String name] (required) identifier for the KeyframeTrack.<br />
+			[page:Array times] (required) array of keyframe times.<br />
+			[page:Array values] values for the keyframes at the times specified.<br />
+			[page:Constant interpolation] the type of interpolation to use. See
+			[page:Animation Animation Constants] for possible values. Default is
+			[page:Animation InterpolateLinear].
+		</p>
+
+
+		<h2>Properties</h2>
+
+
+		<p class="desc">
+			See [page:KeyframeTrack] for inherited properties.
+		</p>
+
+		<h3>[property:Constant DefaultInterpolation]</h3>
+		<p>
+			The default interpolation type to use, [page:Animation InterpolateLinear].
+		</p>
+
+		<h3>[property:String ValueTypeName]</h3>
+		<p>
+			String 'quaternion'.
+		</p>
+
+
+		<h2>Methods</h2>
+
+
+		<p class="desc">
+			See [page:KeyframeTrack] for inherited methods.
+		</p>
+
+		<h3>[method:null InterpolantFactoryMethodLinear]()</h3>
+		<p>
+			Returns a new [page:QuaternionLinearInterpolant QuaternionLinearInterpolant] based on the
+			[page:KeyframeTrack.values values], [page:KeyframeTrack.times times] and
+			[page:KeyframeTrack.valueSize valueSize] of the keyframes.
+		</p>
+
+
+		<h2>Source</h2>
+
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 81 - 0
docs/api/zh/animation/tracks/StringKeyframeTrack.html

@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+
+		[page:KeyframeTrack] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			A Track of string keyframe values.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:String name], [param:Array times], [param:Array values] )</h3>
+		<p>
+			[page:String name] - (required) identifier for the KeyframeTrack.<br />
+			[page:Array times] - (required) array of keyframe times.<br />
+			[page:Array values] - values for the keyframes at the times specified.<br />
+			[page:Constant interpolation] - the type of interpolation to use. See
+			[page:Animation Animation Constants] for possible values. Default is
+			[page:Animation InterpolateDiscrete].
+		</p>
+
+
+		<h2>Properties</h2>
+
+
+		<p class="desc">
+			See [page:KeyframeTrack] for inherited properties.
+		</p>
+
+		<h3>[property:Constant DefaultInterpolation]</h3>
+		<p>
+			The default interpolation type to use, [page:Animation InterpolateDiscrete].
+		</p>
+
+		<h3>[property:Array ValueBufferType]</h3>
+		<p>
+			A normal Array (no Float32Array in this case, unlike *ValueBufferType* of [page:KeyframeTrack]).
+		</p>
+
+		<h3>[property:String ValueTypeName]</h3>
+		<p>
+			String 'string'.
+		</p>
+
+
+		<h2>Methods</h2>
+
+
+		<p class="desc">
+			See [page:KeyframeTrack] for inherited methods.
+		</p>
+
+		<h3>[method:null InterpolantFactoryMethodLinear]()</h3>
+		<p>
+		  The value of this method here is 'undefined', as it does not make sense for discrete properties.
+		</p>
+
+		<h3>[method:null InterpolantFactoryMethodSmooth]()</h3>
+		<p>
+		  The value of this method here is 'undefined', as it does not make sense for discrete properties.
+		</p>
+
+
+		<h2>Source</h2>
+
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 61 - 0
docs/api/zh/animation/tracks/VectorKeyframeTrack.html

@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+
+		[page:KeyframeTrack] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			A Track of vector keyframe values.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:String name], [param:Array times], [param:Array values] )</h3>
+		<p>
+			[page:String name] - (required) identifier for the KeyframeTrack.<br />
+			[page:Array times] - (required) array of keyframe times.<br />
+			[page:Array values] - values for the keyframes at the times specified.<br />
+			[page:Constant interpolation] - the type of interpolation to use. See
+			[page:Animation Animation Constants] for possible values. Default is
+			[page:Animation InterpolateLinear].
+		</p>
+
+
+		<h2>Properties</h2>
+
+
+		<p class="desc">
+			See [page:KeyframeTrack] for inherited properties.
+		</p>
+
+		<h3>[property:String ValueTypeName]</h3>
+		<p>
+			String 'vector'.
+		</p>
+
+
+		<h2>Methods</h2>
+
+
+		<p class="desc">
+			See [page:KeyframeTrack] for inherited methods.
+		</p>
+
+
+		<h2>Source</h2>
+
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 212 - 0
docs/api/zh/audio/Audio.html

@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Object3D] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			创建一个( 全局 ) audio对象.<br /><br />
+
+			使用 [link:https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API Web Audio API].
+		</p>
+
+
+		<h2>例子</h2>
+
+		<p>
+			[example:webaudio_sandbox webaudio / sandbox ]</br>
+			[example:webaudio_visualizer webaudio / visualizer ]
+		</p>
+
+		<code>
+		// create an AudioListener and add it to the camera
+		var listener = new THREE.AudioListener();
+		camera.add( listener );
+
+		// create a global audio source
+		var sound = new THREE.Audio( listener );
+
+		// load a sound and set it as the Audio object's buffer
+		var audioLoader = new THREE.AudioLoader();
+		audioLoader.load( 'sounds/ambient.ogg', function( buffer ) {
+			sound.setBuffer( buffer );
+			sound.setLoop( true );
+			sound.setVolume( 0.5 );
+			sound.play();
+		});
+		</code>
+
+
+		<h2>构造函数</h2>
+
+
+		<h3>[name]( [param:AudioListener listener] )</h3>
+		<p>
+		listener — (必须) [page:AudioListener AudioListener] 的实例.
+		</p>
+
+
+		<h2>属性</h2>
+
+		<h3>[property:Boolean autoplay]</h3>
+		<p>是否自动开始播放. 默认为 *false*.</p>
+
+		<h3>[property:AudioContext context]</h3>
+		<p>构造函数中传入[page:AudioListener listener]的[link:https://developer.mozilla.org/en-US/docs/Web/API/AudioContext AudioContext].</p>
+
+		<h3>[property:Array filters]</h3>
+		<p>表示[link:https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode BiquadFilterNodes]的数组. 可以使用多种不同的低阶filters去创建复杂的音效. filters可以通过 [page:Audio.setFilter] 或者 [page:Audio.setFilters]设置.</p>
+
+		<h3>[property:GainNode gain]</h3>
+		<p>使用[link:https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createGain AudioContext.createGain]()创建的[link:https://developer.mozilla.org/en-US/docs/Web/API/GainNode GainNode].</p>
+
+		<h3>[property:Boolean hasPlaybackControl]</h3>
+		<p>是否可以使用 [page:Audio.play play](),
+			[page:Audio.pause pause]()等方法控制播放. 默认为 *true*.</p>
+
+		<h3>[property:Number playbackRate]</h3>
+		<p>播放速率. 默认为 *1*.</p>
+
+		<h3>[property:Boolean isPlaying]</h3>
+		<p>是否正在播放</p>
+
+		<h3>[property:Number startTime]</h3>
+		<p>开始播放的时间. 和[link:https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/start AudioBufferSourceNode.start]()的*when*参数一样. 默认为 *0*.</p>
+
+		<h3>[property:Number offset]</h3>
+		<p>音频开始播放的偏移时间. 和[link:https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/start AudioBufferSourceNode.start]()的*offset*参数一样. 默认为 *0*.</p>
+
+		<h3>[property:String source]</h3>
+		<p>使用 [link:https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createBufferSource AudioContext.createBufferSource]()创建的[link:https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode AudioBufferSourceNode].</p>
+
+		<h3>[property:String sourceType]</h3>
+		<p>音源的类型. 默认为 'empty'.</p>
+
+		<h3>[property:String type]</h3>
+		<p>表示类型的字符串, 设置为'Audio'.</p>
+
+
+		<h2>方法</h2>
+
+		<h3>[method:Audio connect]()</h3>
+		<p>
+		连接[page:Audio.source]. 在初始化和设置/删除filters时使用.
+		</p>
+
+		<h3>[method:Audio disconnect]()</h3>
+		<p>
+		断开连接[page:Audio.source]. 在设置/删除filters时使用.
+		</p>
+
+		<h3>[method:BiquadFilterNode getFilter]()</h3>
+		<p>
+		返回 [page:Audio.filters filters] 数组的第一个元素.
+		</p>
+
+		<h3>[method:Array getFilters]()</h3>
+		<p>
+		返回[page:Audio.filters filters] 数组.
+		</p>
+
+		<h3>[method:Boolean getLoop]()</h3>
+		<p>
+		返回[link:https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/loop source.loop]
+		 (是否循环播放)的值.
+		</p>
+
+		<h3>[method:GainNode getOutput]()</h3>
+		<p>
+		返回[page:Audio.gain gainNode].
+		</p>
+
+		<h3>[method:Float getPlaybackRate]()</h3>
+		<p>
+		返回[page:Audio.playbackRate playbackRate]的值.
+		</p>
+
+		<h3>[method:Float getVolume]( value )</h3>
+		<p>
+		返回音量.
+		</p>
+
+		<h3>[method:Audio play]()</h3>
+		<p>
+		如果[page:Audio.hasPlaybackControl hasPlaybackControl]是true, 开始播放.
+		</p>
+
+		<h3>[method:Audio pause]()</h3>
+		<p>
+		如果[page:Audio.hasPlaybackControl hasPlaybackControl]是true, 暂停播放.
+		</p>
+
+		<h3>[method:null onEnded]()</h3>
+		<p>
+		播放完成后自动调用. 如果[page:Audio.isPlaying isPlaying]设置为false.
+		</p>
+
+		<h3>[method:Audio setBuffer]( audioBuffer )</h3>
+		<p>
+		设置[page:Audio.source source]给audioBuffer, 和设置[page:Audio.sourceType sourceType]给'buffer'.<br />
+		如果[page:Audio.autoplay autoplay]为true, 也开始播放.
+		</p>
+
+		<h3>[method:Audio setFilter]( filter )</h3>
+		<p>
+		设置一个[link:https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode BiquadFilterNode]给Audio.
+		</p>
+
+		<h3>[method:Audio setFilters]( [param:Array value] )</h3>
+		<p>
+		value--filters数组.<br />
+		应用[link:https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode BiquadFilterNodes]数组给Audio.
+		</p>
+
+		<h3>[method:Audio setLoop]( [param:Boolean value] )</h3>
+		<p>
+		设置[link:https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/loop source.loop] 的值
+		(是否循环播放).
+		</p>
+
+		<h3>[method:Audio setMediaElementSource]( mediaElement )</h3>
+		<p>
+		应用[link:https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement HTMLMediaElement]类型对象作为音源.<br />
+		并且设置[page:Audio.hasPlaybackControl hasPlaybackControl]为false.
+
+		</p>
+
+		<h3>[method:Audio setNodeSource]( audioNode )</h3>
+		<p>
+		设置[page:Audio.source source]给audioBuffer, 和设置[page:Audio.sourceType sourceType]给 'audioNode'.<br />
+		并且设置[page:Audio.hasPlaybackControl hasPlaybackControl]为false.
+
+		</p>
+
+		<h3>[method:Audio setPlaybackRate]( [param:Float value] )</h3>
+		<p>
+		如果[page:Audio.hasPlaybackControl hasPlaybackControl]是true, 设置[page:Audio.playbackRate playbackRate](播放速率) 的值.
+		</p>
+
+		<h3>[method:Audio setVolume]( [param:Float value] )</h3>
+		<p>
+		设置音量.
+		</p>
+
+		<h3>[method:Audio stop]()</h3>
+		<p>
+		如果[page:Audio.hasPlaybackControl hasPlaybackControl]是true, 停止播放,
+		重新设置[page:Audio.startTime startTime]为 *0* 和 设置 [page:Audio.isPlaying isPlaying]为false.
+		</p>
+
+		<h2>源码</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 99 - 0
docs/api/zh/audio/AudioAnalyser.html

@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+			创建AudioAnalyser对象, 使用[link:https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode AnalyserNode]
+			去分析音频数据.<br /><br />
+
+			使用了 [link:https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API Web Audio API].
+
+		</p>
+
+
+		<h2>示例</h2>
+
+		<p>
+			[example:webaudio_sandbox webaudio / sandbox ]</br>
+			[example:webaudio_visualizer webaudio / visualizer ]
+		</p>
+
+		<code>
+		// create an AudioListener and add it to the camera
+		var listener = new THREE.AudioListener();
+		camera.add( listener );
+
+		// create an Audio source
+		var sound = new THREE.Audio( listener );
+
+		// load a sound and set it as the Audio object's buffer
+		var audioLoader = new THREE.AudioLoader();
+		audioLoader.load( 'sounds/ambient.ogg', function( buffer ) {
+			sound.setBuffer( buffer );
+			sound.setLoop(true);
+			sound.setVolume(0.5);
+			sound.play();
+		});
+
+		// create an AudioAnalyser, passing in the sound and desired fftSize
+		var analyser = new THREE.AudioAnalyser( sound, 32 );
+
+		// get the average frequency of the sound
+		var data = analyser.getAverageFrequency();
+		</code>
+
+
+		<h2>构造函数</h2>
+
+
+		<h3>[name]( audio, [link:https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/fftSize fftSize] )</h3>
+		<p>
+		创建[page:AudioAnalyser AudioAnalyser].
+		</p>
+
+
+		<h2>属性</h2>
+
+		<h3>[property:AnalyserNode analyser]</h3>
+		<p>[link:https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode AnalyserNode]用来分析音频数据.</p>
+
+		<h3>[property:Integer fftSize]</h3>
+		<p>
+		2的幂次方最高为2048, 用来表示确定频域的FFT (傅立叶变换)大小.
+		这个[link:https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/fftSize page]有详细信息.
+		</p>
+
+		<h3>[property:Uint8Array data]</h3>
+		<p>
+		用来分析数据的Uint8Array的大小由[link:https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/frequencyBinCount analyser.frequencyBinCount]
+		确定.
+		</p>
+
+
+		<h2>方法</h2>
+
+
+		<h3>[method:Uint8Array getFrequencyData]()</h3>
+		<p>
+		使用网络音频的[link:https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/getByteFrequencyData getByteFrequencyData] 方法.
+		看这个页面.
+		</p>
+
+		<h3>[method:Number getAverageFrequency]()</h3>
+		<p>
+		通过方法[page:AudioAnalyser.getFrequencyData getFrequencyData]获取平均频率.
+		</p>
+
+		<h2>源码</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 42 - 0
docs/api/zh/audio/AudioContext.html

@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+		包含用来设置[link:https://developer.mozilla.org/en-US/docs/Web/API/AudioContext AudioContext]的方法.<br /><br />
+
+		在[page:AudioListener AudioListener]和[page:AudioLoader AudioLoader] 类中被使用.<br /><br />
+
+		使用了 [link:https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API Web Audio API].
+		</p>
+
+
+
+		<h2>方法</h2>
+
+		<h3>[method:AudioContext getContext]()</h3>
+		<p>
+		如果定义了,返回给外部*context*的值,
+		否则创建一个新的[link:https://developer.mozilla.org/en-US/docs/Web/API/AudioContext AudioContext].
+		</p>
+
+		<h3>[method:AudioContext setContext]( [param:AudioConetxt value] )</h3>
+		<p>
+		 外部用来设置 *context* 的值.
+		</p>
+
+
+		<h2>源码</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 108 - 0
docs/api/zh/audio/AudioListener.html

@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Object3D] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			[name] 用一个虚拟的[link:https://developer.mozilla.org/de/docs/Web/API/AudioListener listener]表示在场景中所有的位置和非位置相关的音效.</br>
+			一个three.js程序通常创建一个[name]. 它是音频实体构造函数的必须参数,比如 [page:Audio Audio] and [page:PositionalAudio PositionalAudio].</br>
+			大多数情况下, listener对象是camera的子对象. Camera的3D变换表示了listener的3D变换.
+		</p>
+
+
+		<h2>示例</h2>
+
+		<p>
+			[example:webaudio_sandbox webaudio / sandbox ]</br>
+			[example:webaudio_timing webaudio / timing ]</br>
+			[example:webaudio_visualizer webaudio / visualizer ]
+		</p>
+
+		<code>
+		// create an AudioListener and add it to the camera
+		var listener = new THREE.AudioListener();
+		camera.add( listener );
+
+		// create a global audio source
+		var sound = new THREE.Audio( listener );
+
+		// load a sound and set it as the Audio object's buffer
+		var audioLoader = new THREE.AudioLoader();
+		audioLoader.load( 'sounds/ambient.ogg', function( buffer ) {
+			sound.setBuffer( buffer );
+			sound.setLoop(true);
+			sound.setVolume(0.5);
+			sound.play();
+		});
+		</code>
+
+
+		<h2>构造函数</h2>
+
+
+		<h3>[name](  )</h3>
+		<p>
+		创建一个新的AudioListener.
+		</p>
+
+
+		<h2>属性</h2>
+
+		<h3>[property:AudioContext context]</h3>
+		<p>[page:AudioListener listener]构造函数中的[link:https://developer.mozilla.org/en-US/docs/Web/API/AudioContext AudioContext].</p>
+
+		<h3>[property:GainNode gain]</h3>
+		<p>使用[link:https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createGain AudioContext.createGain]()创建 [link:https://developer.mozilla.org/en-US/docs/Web/API/GainNode GainNode].</p>
+
+		<h3>[property:AudioNode filter]</h3>
+		<p>默认为*null*.</p>
+
+
+		<h2>方法</h2>
+
+
+		<h3>[method:GainNode getInput]()</h3>
+		<p>
+		返回[page:AudioListener.gain gainNode].
+		</p>
+
+		<h3>[method:AudioListener removeFilter]()</h3>
+		<p>
+		设置[page:AudioListener.filter filter]属性为*null*.
+		</p>
+
+		<h3>[method:AudioNode getFilter]()</h3>
+		<p>
+		返回[page:AudioListener.filter filter]属性的值.
+		</p>
+
+		<h3>[method:AudioListener setFilter]( [param:AudioNode value] )</h3>
+		<p>
+		设置[page:AudioListener.filter filter] 属性的值.
+		</p>
+
+		<h3>[method:Float getMasterVolume]()</h3>
+		<p>
+		返回音量.
+		</p>
+
+		<h3>[method:AudioListener setMasterVolume]( [param:Number value] )</h3>
+		<p>
+		设置音量.
+		</p>
+
+
+		<h2>源码</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 135 - 0
docs/api/zh/audio/PositionalAudio.html

@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Object3D] &rarr; [page:Audio] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			创建一个位置相关的音频对象.<br /><br />
+
+			使用了[link:https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API Web Audio API].
+		</p>
+
+
+		<h2>示例</h2>
+
+		<p>
+			[example:webaudio_orientation webaudio / orientation ]</br>
+			[example:webaudio_sandbox webaudio / sandbox ]</br>
+			[example:webaudio_timing webaudio / timing ]
+		</p>
+
+		<code>
+		// create an AudioListener and add it to the camera
+		var listener = new THREE.AudioListener();
+		camera.add( listener );
+
+		// create the PositionalAudio object (passing in the listener)
+		var sound = new THREE.PositionalAudio( listener );
+
+		// load a sound and set it as the PositionalAudio object's buffer
+		var audioLoader = new THREE.AudioLoader();
+		audioLoader.load( 'sounds/song.ogg', function( buffer ) {
+			sound.setBuffer( buffer );
+			sound.setRefDistance( 20 );
+			sound.play();
+		});
+
+		// create an object for the sound to play from
+		var sphere = new THREE.SphereGeometry( 20, 32, 16 );
+		var material = new THREE.MeshPhongMaterial( { color: 0xff2200 } );
+		var mesh = new THREE.Mesh( sphere, material );
+		scene.add( mesh );
+
+		// finally add the sound to the mesh
+		mesh.add( sound );
+		</code>
+
+
+		<h2>构造函数</h2>
+
+		<h3>[name]( [param:AudioListener listener] )</h3>
+		<p>
+		listener — (必须) [page:AudioListener AudioListener] 实例.
+		</p>
+
+
+		<h2>属性</h2>
+
+		<p>
+			[page:Audio Audio]类的继承属性.
+		</p>
+
+		<h3>[property:PannerNode panner]</h3>
+		<p>位置相关音频的[link:https://developer.mozilla.org/en-US/docs/Web/API/PannerNode PannerNode].</p>
+
+
+		<h2>方法</h2>
+
+		<p>
+			[page:Audio Audio]类的继承方法.
+		</p>
+
+		<h3>[method:PannerNode getOutput]()</h3>
+		<p>
+		返回[page:PositionalAudio.panner panner].
+		</p>
+
+		<h3>[method:Float getRefDistance]()</h3>
+		<p>
+		返回[link:https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/refDistance panner.refDistance]的值.
+		</p>
+
+		<h3>[method:PositionalAudio setRefDistance]( [param:Float value] )</h3>
+		<p>
+		设置[link:https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/refDistance panner.refDistance]的值.
+		</p>
+
+		<h3>[method:Float getRolloffFactor]()</h3>
+		<p>
+		返回[link:https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/rolloffFactor panner.rolloffFactor]的值.
+		</p>
+
+		<h3>[method:PositionalAudio setRolloffFactor]( [param:Float value] )</h3>
+		<p>
+		设置[link:https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/rolloffFactor panner.rolloffFactor]的值.
+		</p>
+
+		<h3>[method:String getDistanceModel]()</h3>
+		<p>
+		返回[link:https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/distanceModel panner.distanceModel]的值.
+		</p>
+
+		<h3>[method:PositionalAudio setDistanceModel]( [param:String value] )</h3>
+		<p>
+		设置[link:https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/distanceModel panner.distanceModel]的值.
+		</p>
+
+		<h3>[method:Float getMaxDistance]()</h3>
+		<p>
+		返回[link:https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/maxDistance panner.maxDistance]的值.
+		</p>
+
+		<h3>[method:PositionalAudio setMaxDistance]( [param:Float value] )</h3>
+		<p>
+		设置[link:https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/maxDistance panner.maxDistance]的值.
+		</p>
+
+		<h3>[method:PositionalAudio setDirectionalCone]( [param:Float coneInnerAngle], [param:Float coneOuterAngle], [param:Float coneOuterGain] )</h3>
+		<p>
+		这个方法用来把环绕声音转换为定向声音[link:https://developer.mozilla.org/en-US/docs/Web/API/PannerNode directional sound].
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 47 - 0
docs/api/zh/cameras/ArrayCamera.html

@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:PerspectiveCamera] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			[name] can be used in order to efficiently render a scene with a predefined set of cameras. This is an important performance aspect for rendering VR scenes.<br />
+			An instance of [name] always has an array of sub cameras. It's mandatory to define for each sub camera the *bounds* property which determines the part of the viewport that is rendered with this camera.
+		</p>
+
+		<h2>Example</h2>
+
+		<p>[example:webgl_camera_array camera / array ]</p>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( [param:Array array] )</h3>
+		<p>
+			An array of cameras.
+		</p>
+
+
+		<h2>Properties</h2>
+		<p>See the base [page:PerspectiveCamera] class for common properties.</p>
+
+		<h3>[property:Array cameras]</h3>
+		<p>
+			An array of cameras.
+		</p>
+
+		<h2>Methods</h2>
+		<p>See the base [page:PerspectiveCamera] class for common methods.</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 87 - 0
docs/api/zh/cameras/Camera.html

@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Object3D] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			Abstract base class for cameras. This class should always be inherited when you build a new camera.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]()</h3>
+		<p>
+			Creates a new [name]. Note that this class is not intended to be called directly;
+			you probably want a [page:PerspectiveCamera] or [page:OrthographicCamera] instead.
+		</p>
+
+
+		<h2>Properties</h2>
+		<p>See the base [page:Object3D] class for common properties.</p>
+
+		<h3>[property:Boolean isCamera]</h3>
+		<p>
+			Used to check whether this or derived classes are cameras. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally by the renderer for optimisation.
+		</p>
+
+		<h3>[property:Layers layers]</h3>
+		<p>
+		The [page:Layers layers] that the camera is a member of. This is an inherited
+		property from [page:Object3D].<br /><br />
+
+		Objects must share at least one layer with the camera to be seen
+		when the camera's viewpoint is rendered.
+		</p>
+
+		<h3>[property:Matrix4 matrixWorldInverse]</h3>
+		<p>
+			This is the inverse of matrixWorld. MatrixWorld contains the Matrix which has
+			the world transform of the Camera.
+		</p>
+
+		<h3>[property:Matrix4 projectionMatrix]</h3>
+		<p>This is the matrix which contains the projection.</p>
+
+		<h3>[property:Matrix4 projectionMatrixInverse]</h3>
+		<p>The inverse of projectionMatrix.</p>
+
+
+		<h2>Methods</h2>
+		<p>See the base [page:Object3D] class for common methods.</p>
+
+		<h3>[method:Camera clone]( )</h3>
+		<p>
+			Return a new camera with the same properties as this one.
+		</p>
+
+		<h3>[method:Camera copy]( [param:Camera source], [param:Boolean recursive] )</h3>
+		<p>
+		Copy the properties from the source camera into this one.
+		</p>
+
+		<h3>[method:Vector3 getWorldDirection]( [param:Vector3 target] )</h3>
+		<p>
+		[page:Vector3 target] — the result will be copied into this Vector3. <br /><br />
+
+		Returns a [page:Vector3] representing the world space direction in which the camera is looking.
+		(Note: A camera looks down its local, negative z-axis).<br /><br />
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 89 - 0
docs/api/zh/cameras/CubeCamera.html

@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Object3D] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">Creates 6 cameras that render to a [page:WebGLRenderTargetCube].</p>
+
+		<h2>Examples</h2>
+
+		<p>[example:webgl_materials_cubemap_dynamic materials / cubemap / dynamic ]</p>
+		<p>[example:webgl_materials_cubemap_dynamic2 materials / cubemap / dynamic2 ]</p>
+		<p>[example:webgl_shading_physical shading / physical ]</p>
+
+		<code>// Create cube camera
+		var cubeCamera = new THREE.CubeCamera( 1, 100000, 128 );
+		scene.add( cubeCamera );
+
+		// Create car
+		var chromeMaterial = new THREE.MeshLambertMaterial( { color: 0xffffff, envMap: cubeCamera.renderTarget } );
+		var car = new Mesh( carGeometry, chromeMaterial );
+		scene.add( car );
+
+		// Update the render target cube
+		car.setVisible( false );
+		cubeCamera.position.copy( car.position );
+		cubeCamera.update( renderer, scene );
+
+		// Render the scene
+		car.setVisible( true );
+		renderer.render( scene, camera );
+		</code>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:Number near], [param:Number far], [param:Number cubeResolution] )</h3>
+		<p>
+		near -- The near clipping distance. <br />
+		far -- The far clipping distance <br />
+		cubeResolution -- Sets the length of the cube's edges.
+		</p>
+		<p>
+		Constructs a CubeCamera that contains 6 [page:PerspectiveCamera PerspectiveCameras] that
+		render to a [page:WebGLRenderTargetCube].
+		</p>
+
+
+		<h2>Properties</h2>
+		<p>See the base [page:Object3D] class for common properties.</p>
+
+		<h3>[property:WebGLRenderTargetCube renderTarget]</h3>
+		<p>
+		The cube texture that gets generated.
+		</p>
+
+		<h2>Methods</h2>
+		<p>See the base [page:Object3D] class for common methods.</p>
+
+
+		<h3>[method:null update]( [param:WebGLRenderer renderer], [param:Scene scene] )</h3>
+		<p>
+		renderer -- The current WebGL renderer <br />
+		scene -- The current scene
+		</p>
+		<p>
+		Call this to update the [page:CubeCamera.renderTarget renderTarget].
+		</p>
+
+		<h3>[method:null clear]( [param:WebGLRenderer renderer], [param:Boolean color], [param:Boolean depth], [param:Boolean stencil] )</h3>
+		<p>
+		Call this to clear the [page:CubeCamera.renderTarget renderTarget] color, depth, and/or stencil buffers.
+		The color buffer is set to the renderer's current clear color. Arguments default to *true*.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 144 - 0
docs/api/zh/cameras/OrthographicCamera.html

@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Object3D] &rarr; [page:Camera] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			Camera that uses [link:https://en.wikipedia.org/wiki/Orthographic_projection orthographic projection].<br /><br />
+
+			In this projection mode, an object's size in the rendered image stays constant
+			regardless of its distance from the camera.<br /><br />
+
+			This can be useful for rendering 2D scenes and UI elements, amongst other things.
+		</p>
+
+
+		<h2>Example</h2>
+
+		<p>[example:canvas_camera_orthographic camera / orthographic ]</p>
+		<p>[example:webgl_camera camera ]</p>
+		<p>[example:webgl_interactive_cubes_ortho interactive / cubes / ortho ]</p>
+		<p>[example:webgl_materials_cubemap_dynamic materials / cubemap / dynamic ]</p>
+		<p>[example:webgl_postprocessing_advanced postprocessing / advanced ]</p>
+		<p>[example:webgl_postprocessing_dof2 postprocessing / dof2 ]</p>
+		<p>[example:webgl_postprocessing_godrays postprocessing / godrays ]</p>
+		<p>[example:webgl_rtt rtt ]</p>
+		<p>[example:webgl_shaders_tonemapping shaders / tonemapping ]</p>
+		<p>[example:webgl_shadowmap shadowmap ]</p>
+		<p>[example:webgl_terrain_dynamic terrain / dynamic ]</p>
+
+		<code>var camera = new THREE.OrthographicCamera( width / - 2, width / 2, height / 2, height / - 2, 1, 1000 );
+scene.add( camera );</code>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:Number left], [param:Number right], [param:Number top], [param:Number bottom], [param:Number near], [param:Number far] )</h3>
+		<p>
+		left — Camera frustum left plane.<br />
+		right — Camera frustum right plane.<br />
+		top — Camera frustum top plane.<br />
+		bottom — Camera frustum bottom plane.<br />
+		near — Camera frustum near plane.<br />
+		far — Camera frustum far plane.<br /><br />
+
+		Together these define the camera's [link:https://en.wikipedia.org/wiki/Viewing_frustum viewing frustum].
+		</p>
+
+
+		<h2>Properties</h2>
+		<p>
+			See the base [page:Camera] class for common properties.<br>
+ 			Note that after making changes to most of these properties you will have to call
+ 			[page:OrthographicCamera.updateProjectionMatrix .updateProjectionMatrix] for the changes to take effect.
+		</p>
+
+		<h3>[property:Float bottom]</h3>
+		<p>Camera frustum bottom plane.</p>
+
+		<h3>[property:Float far]</h3>
+		<p>
+		Camera frustum far plane. Default is *2000*.<br /><br />
+
+		The valid range is between the current value of the [page:.near near] plane and infinity.
+		</p>
+
+		<h3>[property:Boolean isOrthographicCamera]</h3>
+		<p>
+			Used to test whether this or derived classes are OrthographicCameras. Default is *true*.<br /><br />
+
+			This should not be changed as it is used internally by the renderer for optimisation.
+		</p>
+
+		<h3>[property:Float left]</h3>
+		<p>Camera frustum left plane.</p>
+
+		<h3>[property:Float near]</h3>
+		<p>
+			Camera frustum near plane. Default is *0.1*.<br /><br />
+
+			The valid range is between 0 and the current value of the [page:.far far] plane.
+			Note that, unlike for the [page:PerspectiveCamera], *0* is a valid value for an
+			OrthographicCamera's near plane.
+		</p>
+
+		<h3>[property:Float right]</h3>
+		<p>Camera frustum right plane.</p>
+
+		<h3>[property:Float top]</h3>
+		<p>Camera frustum top plane.</p>
+
+		<h3>[property:Object view]</h3>
+		<p>Set by [page:OrthographicCamera.setViewOffset setViewOffset]. Default is *null*.</p>
+
+		<h3>[property:number zoom]</h3>
+		<p>Gets or sets the zoom factor of the camera. Default is *1*.</p>
+
+		<h2>Methods</h2>
+		<p>See the base [page:Camera] class for common methods.</p>
+
+		<h3>[method:null setViewOffset]( [param:Float fullWidth], [param:Float fullHeight], [param:Float x], [param:Float y], [param:Float width], [param:Float height] )</h3>
+		<p>
+		fullWidth — full width of multiview setup<br />
+		fullHeight — full height of multiview setup<br />
+		x — horizontal offset of subcamera<br />
+		y — vertical offset of subcamera<br />
+		width — width of subcamera<br />
+		height — height of subcamera<br /><br />
+
+			Sets an offset in a larger [link:https://en.wikipedia.org/wiki/Viewing_frustum viewing frustum].
+			This is useful for multi-window or multi-monitor/multi-machine setups.
+			For an example on how to use it see [page:PerspectiveCamera.setViewOffset PerspectiveCamera].
+		</p>
+
+		<h3>[method:null clearViewOffset]()</h3>
+		<p>
+		Removes any offset set by the .setViewOffset method.
+		</p>
+
+		<h3>[method:null updateProjectionMatrix]()</h3>
+		<p>
+		Updates the camera projection matrix. Must be called after any change of parameters.
+		</p>
+
+		<h3>[method:JSON toJSON]()</h3>
+		<p>
+		Return the camera's data in JSON format.
+		</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 204 - 0
docs/api/zh/cameras/PerspectiveCamera.html

@@ -0,0 +1,204 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Object3D] &rarr; [page:Camera] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			Camera that uses [link:https://en.wikipedia.org/wiki/Perspective_(graphical) perspective projection].<br /><br />
+
+			This projection mode is designed to mimic the way the human eye sees. It is the most
+			common projection mode used for rendering a 3D scene.
+		</p>
+
+
+		<h2>Example</h2>
+
+		<p>[example:canvas_geometry_birds geometry / birds ]</p>
+		<p>[example:canvas_geometry_cube geometry / cube ]</p>
+		<p>[example:webgl_animation_skinning_blending animation / skinning / blending ]</p>
+		<p>[example:webgl_animation_skinning_morph animation / skinning / blending ]</p>
+		<p>[example:webgl_effects_stereo effects / stereo ]</p>
+		<p>[example:webgl_interactive_cubes interactive / cubes ]</p>
+		<p>[example:webgl_loader_collada_skinning loader / collada / skinning ]</p>
+
+		<code>var camera = new THREE.PerspectiveCamera( 45, width / height, 1, 1000 );
+scene.add( camera );</code>
+
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( [param:Number fov], [param:Number aspect], [param:Number near], [param:Number far] )</h3>
+		<p>
+		fov — Camera frustum vertical field of view.<br />
+		aspect — Camera frustum aspect ratio.<br />
+		near — Camera frustum near plane.<br />
+		far — Camera frustum far plane.<br /><br />
+
+			Together these define the camera's [link:https://en.wikipedia.org/wiki/Viewing_frustum viewing frustum].
+		</p>
+
+
+		<h2>Properties</h2>
+		<p>
+			See the base [page:Camera] class for common properties.<br>
+			Note that after making changes to most of these properties you will have to call
+			[page:PerspectiveCamera.updateProjectionMatrix .updateProjectionMatrix] for the changes to take effect.
+		</p>
+
+		<h3>[property:Float aspect]</h3>
+		<p>Camera frustum aspect ratio, usually the canvas width / canvas height. Default is *1* (square canvas).</p>
+
+		<h3>[property:Float far]</h3>
+		<p>
+			Camera frustum far plane. Default is *2000*.<br /><br />
+
+			The valid range is between the current value of the [page:.near near] plane and infinity.
+		</p>
+
+		<h3>[property:Float filmGauge]</h3>
+		<p>Film size used for the larger axis. Default is 35 (millimeters). This parameter does not influence the projection matrix unless .filmOffset is set to a nonzero value.</p>
+
+		<h3>[property:Float filmOffset]</h3>
+		<p>Horizontal off-center offset in the same unit as .filmGauge. Default is *0*.</p>
+
+		<h3>[property:Float focus]</h3>
+		<p>Object distance used for stereoscopy and depth-of-field effects.
+			This parameter does not influence the projection matrix unless a [page:StereoCamera] is being used.
+			Default is *10*.
+		</p>
+
+		<h3>[property:Float fov]</h3>
+		<p>Camera frustum vertical field of view, from bottom to top of view, in degrees. Default is *50*.</p>
+
+		<h3>[property:Boolean isPerspectiveCamera]</h3>
+		<p>
+			Used to test whether this or derived classes are PerspectiveCameras. Default is *true*.<br /><br />
+
+			This should not be changed as it is used internally by the renderer for optimisation.
+		</p>
+
+
+		<h3>[property:Float near]</h3>
+		<p>
+			Camera frustum near plane. Default is *0.1*.<br /><br />
+
+			The valid range is greater than 0 and less than the current value of the [page:.far far] plane.
+			Note that, unlike for the [page:OrthographicCamera], *0* is <em>not</em> a valid value
+			for a PerspectiveCamera's near plane.
+		</p>
+
+		<h3>[property:Object view]</h3>
+		<p>
+			Frustum window specification or null.
+			This is set using the [page:PerspectiveCamera.setViewOffset .setViewOffset] method
+			and cleared using [page:PerspectiveCamera.clearViewOffset .clearViewOffset].
+		</p>
+
+		<h3>[property:number zoom]</h3>
+		<p>Gets or sets the zoom factor of the camera. Default is *1*.</p>
+
+
+		<h2>Methods</h2>
+		<p>See the base [page:Camera] class for common methods.</p>
+
+		<h3>[method:null clearViewOffset]()</h3>
+		<p>Removes any offset set by the [page:PerspectiveCamera.setViewOffset .setViewOffset] method.</p>
+
+		<h3>[method:Float getEffectiveFOV]()</h3>
+		<p>Returns the current vertical field of view angle in degrees considering .zoom.</p>
+
+		<h3>[method:Float getFilmHeight]()</h3>
+		<p>
+		Returns the height of the image on the film. If .aspect is less than or equal to one
+		(portrait format), the result equals .filmGauge.
+		</p>
+
+		<h3>[method:Float getFilmWidth]()</h3>
+		<p>
+		Returns the width of the image on the film. If .aspect is greater than or equal to one
+		(landscape format), the result equals .filmGauge.
+		</p>
+
+		<h3>[method:Float getFocalLength]()</h3>
+		<p>Returns the focal length of the current .fov in respect to .filmGauge.</p>
+
+		<h3>[method:null setFocalLength]( [param:Float focalLength] )</h3>
+		<p>
+		Sets the FOV by focal length in respect to the current [page:PerspectiveCamera.filmGauge .filmGauge].<br /><br />
+
+		By default, the focal length is specified for a 35mm (full frame) camera.
+		</p>
+
+		<h3>[method:null setViewOffset]( [param:Float fullWidth], [param:Float fullHeight], [param:Float x], [param:Float y], [param:Float width], [param:Float height] )</h3>
+		<p>
+		fullWidth — full width of multiview setup<br />
+		fullHeight — full height of multiview setup<br />
+		x — horizontal offset of subcamera<br />
+		y — vertical offset of subcamera<br />
+		width — width of subcamera<br />
+		height — height of subcamera
+		</p>
+
+		<p>
+		Sets an offset in a larger frustum. This is useful for multi-window or multi-monitor/multi-machine setups.
+		</p>
+
+		<p>
+		For example, if you have 3x2 monitors and each monitor is 1920x1080 and the monitors are in grid like this:<br />
+
+		<pre>
++---+---+---+
+| A | B | C |
++---+---+---+
+| D | E | F |
++---+---+---+
+		</pre>
+
+		then for each monitor you would call it like this:<br />
+
+		<code>var w = 1920;
+var h = 1080;
+var fullWidth = w * 3;
+var fullHeight = h * 2;
+
+// A
+camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );
+// B
+camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );
+// C
+camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );
+// D
+camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );
+// E
+camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );
+// F
+camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );
+</code>
+
+		Note there is no reason monitors have to be the same size or in a grid.
+		</p>
+
+		<h3>[method:null updateProjectionMatrix]()</h3>
+		<p>
+		Updates the camera projection matrix. Must be called after any change of parameters.
+		</p>
+
+		<h3>[method:JSON toJSON]()</h3>
+		<p>
+		Return camera data in JSON format.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 67 - 0
docs/api/zh/cameras/StereoCamera.html

@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+		Dual [page:PerspectiveCamera PerspectiveCamera]s used for effects such as
+		[link:https://en.wikipedia.org/wiki/Anaglyph_3D 3D Anaglyph] or [link:https://en.wikipedia.org/wiki/parallax_barrier Parallax Barrier].
+		</p>
+
+
+		<h2>Example</h2>
+
+		<p>[example:webgl_effects_anaglyph effects / anaglyph ]</p>
+		<p>[example:webgl_effects_parallaxbarrier effects / parallaxbarrier ]</p>
+		<p>[example:webgl_effects_stereo effects / stereo ]</p>
+
+		<p>
+		This class is used internally in the files<br /><br />
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/effects/AnaglyphEffect.js examples/js/effects/AnaglyphEffect.js]<br /><br />
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/effects/ParallaxBarrierEffect.js examples/js/effects/ParallaxBarrierEffect.js]<br /><br />
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/effects/StereoEffect.js examples/js/effects/StereoEffect.js]<br /><br />
+		used in the above examples.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( )</h3>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Float aspect]</h3>
+		<p>Default is *1*.</p>
+
+		<h3>[property:Float eyeSep]</h3>
+		<p>Default is *0.064*.</p>
+
+		<h3>[property:PerspectiveCamera cameraL]</h3>
+		<p>Left camera. This is added to [page:Layers layer 1] - objects to be rendered
+		by the left camera must also be added to this layer.</p>
+
+		<h3>[property:PerspectiveCamera cameraR]</h3>
+		<p>Right camera.This is added to [page:Layers layer 2] - objects to be rendered
+		by the right camera must also be added to this layer.</p>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null update]( [param:PerspectiveCamera camera] )</h3>
+		<p>
+		Update the stereo cameras based on the camera passed in.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 39 - 0
docs/api/zh/constants/Animation.html

@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>Animation Constants</h1>
+
+		<h2>Loop Modes</h2>
+    
+		<code>
+THREE.LoopOnce
+THREE.LoopRepeat
+THREE.LoopPingPong
+		</code>
+
+    <h2>Interpolation Modes</h2>
+    <code>
+THREE.InterpolateDiscrete
+THREE.InterpolateLinear
+THREE.InterpolateSmooth
+    </code>
+
+    <h2>Ending Modes</h2>
+    <code>
+THREE.ZeroCurvatureEnding
+THREE.ZeroSlopeEnding
+THREE.WrapAroundEnding
+    </code>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/constants.js src/constants.js]
+	</body>
+</html>

+ 37 - 0
docs/api/zh/constants/Core.html

@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>Core Constants</h1>
+
+		<h2>Revision Number</h2>
+
+		<code>
+		THREE.REV
+		</code>
+
+		<div id="rev">
+			The current three.js [link:https://github.com/mrdoob/three.js/releases revision number].
+		</div>
+
+    <h2>Mouse Buttons</h2>
+    <code>
+		THREE.MOUSE.LEFT
+		THREE.MOUSE.MIDDLE
+		THREE.MOUSE.RIGHT
+    </code>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/constants.js src/constants.js]
+
+	</body>
+
+
+</html>

+ 63 - 0
docs/api/zh/constants/CustomBlendingEquations.html

@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>Custom Blending Equation Constants</h1>
+
+
+		<h2>Example</h2>
+		<p>[example:webgl_materials_blending_custom materials / blending / custom ]</p>
+
+		<h2>Usage</h2>
+		<p>
+			These work with all material types. First set the material's blending mode to THREE.CustomBlending, then set the desired Blending Equation, Source Factor and Destination Factor.
+		</p>
+
+		<code>
+		var material = new THREE.MeshBasicMaterial( {color: 0x00ff00} );
+		material.blending = THREE.CustomBlending;
+		material.blendEquation = THREE.AddEquation; //default
+		material.blendSrc = THREE.SrcAlphaFactor; //default
+		material.blendDst = THREE.OneMinusSrcAlphaFactor; //default
+		</code>
+
+		<h2>Blending Equations</h2>
+		<code>
+		THREE.AddEquation
+		THREE.SubtractEquation
+		THREE.ReverseSubtractEquation
+		THREE.MinEquation
+		THREE.MaxEquation
+		</code>
+
+		<h2>Source Factors</h2>
+		<code>
+		THREE.ZeroFactor
+		THREE.OneFactor
+		THREE.SrcColorFactor
+		THREE.OneMinusSrcColorFactor
+		THREE.SrcAlphaFactor
+		THREE.OneMinusSrcAlphaFactor
+		THREE.DstAlphaFactor
+		THREE.OneMinusDstAlphaFactor
+		THREE.DstColorFactor
+		THREE.OneMinusDstColorFactor
+		THREE.SrcAlphaSaturateFactor
+		</code>
+
+		<h2>Destination Factors</h2>
+		<p>
+			All of the Source Factors are valid as Destination Factors, except for <code>THREE.SrcAlphaSaturateFactor</code>
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/constants.js src/constants.js]
+	</body>
+</html>

+ 83 - 0
docs/api/zh/constants/DrawModes.html

@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>Draw Mode Constants</h1>
+
+		<p class="desc">
+			These are valid values for [page:Mesh.drawMode], and control how the list of vertices is interpeted once sent to the GPU.<br /><br />
+
+			Note that these only work when [page:Mesh.geometry] is a [page:BufferGeometry]. Changing this
+			when [page:Mesh.geometry] is a [page:Geometry] will have no effect.<br /><br />
+
+
+
+		</p>
+
+		<h2>Draw Modes</h2>
+
+		<code>
+			THREE.TrianglesDrawMode
+		</code>
+		<p>
+			This is the default, and results in every three consecutive vertices (v0, v1, v2), (v2, v3, v5), ...
+			being interpreted as a separate triangle. <br />
+			If the number of vertices is not a multiple of 3, excess vertices are ignored.
+		</p>
+
+		<code>
+			THREE.TriangleStripDrawMode
+		</code>
+		<p>
+			This will result in a series of triangles connected in a strip, given by (v0, v1, v2), (v2, v1, v3), (v2, v3, v4), ...
+			so that every subsequent triangle shares two vertices with the previous triangle.
+		</p>
+
+		<code>
+			THREE.TriangleFanDrawMode
+		</code>
+		<p>
+			This will result in a series of triangles each sharing the first vertex (like a fan),
+			given by (v0, v1, v2), (v0, v2, v3), (v0, v3, v4), ... <br /><br />
+
+			<em>Note:</em> As of [link:https://en.wikipedia.org/wiki/DirectX#DirectX_10 DirectX10], this mode is not supported. As Chrome and Firefox
+			render WebGL using [link:https://en.wikipedia.org/wiki/ANGLE_(software) ANGLE] on Windows,
+			internally this mode will be converted to a supported mode, which will likely lead to lowered
+			performance on those browsers.
+		</p>
+
+
+		<h2>Usage</h2>
+
+		<code>
+		var geometry = new THREE.Geometry();
+
+		geometry.vertices.push(
+			new THREE.Vector3( -10,  10, 0 ),
+			new THREE.Vector3( -10, -10, 0 ),
+			new THREE.Vector3(  10, -10, 0 ),
+			...
+		);
+		geometry.faces.push( new THREE.Face3( 0, 1, 2 ), ... );
+
+		var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
+
+		var mesh = new THREE.Mesh( geometry, material );
+		mesh.drawMode = THREE.TrianglesDrawMode; //default
+
+		scene.add( mesh );
+		</code>
+
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/constants.js src/constants.js]
+	</body>
+</html>

+ 101 - 0
docs/api/zh/constants/Materials.html

@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>Material Constants</h1>
+
+		<p class="desc">
+		These constants define properties common to all material types,
+		with the exception of Texture Combine Operations which only apply to [page:MeshBasicMaterial.combine MeshBasicMaterial], [page:MeshLambertMaterial.combine MeshLambertMaterial] and [page:MeshPhongMaterial.combine MeshPhongMaterial].<br />
+		</p>
+
+
+		<h2>Side</h2>
+		<code>
+		THREE.FrontSide
+		THREE.BackSide
+		THREE.DoubleSide
+		</code>
+		<p>
+		Defines which side of faces will be rendered - front, back or both.
+		Default is [page:Constant FrontSide].
+		</p>
+
+
+		<h2>Colors</h2>
+		<code>
+		THREE.NoColors
+		THREE.FaceColors
+		THREE.VertexColors
+		</code>
+		<p>
+		[page:Constant NoColors] is the default and applies the material's color to all faces.<br />
+		[page:Constant FaceColors] colors faces according to each [page:Face3 Face3] [page:Color Color] value.<br />
+		[page:Constant VertexColors] colors faces according to each [page:Face3 Face3] vertexColors value. This is an array of three [page:Color Color]s, one for each vertex in the face.<br />
+		See the [example:webgl_geometry_colors geometry / colors] example.
+		</p>
+
+		<h2>Blending Mode</h2>
+		<code>
+		THREE.NoBlending
+		THREE.NormalBlending
+		THREE.AdditiveBlending
+		THREE.SubtractiveBlending
+		THREE.MultiplyBlending
+		THREE.CustomBlending
+		</code>
+
+
+		<p>
+		These control the source and destination blending equations for the material's RGB and Alpha sent to the WebGLRenderer for use by WebGL.<br />
+		[page:Constant NormalBlending] is the default.<br />
+		Note that [page:Constant CustomBlending] must be set to use [page:CustomBlendingEquation Custom Blending Equations].<br />
+		See the [example:webgl_materials_blending materials / blending] example.<br />
+		</p>
+
+		<h2>Depth Mode</h2>
+		<code>
+		THREE.NeverDepth
+		THREE.AlwaysDepth
+		THREE.LessDepth
+		THREE.LessEqualDepth
+		THREE.GreaterEqualDepth
+		THREE.GreaterDepth
+		THREE.NotEqualDepth
+		</code>
+		<p>
+		Which depth function the material uses to compare incoming pixels Z-depth against the current Z-depth buffer value. If the result of the comparison is true, the pixel will be drawn.<br />
+		[page:Materials NeverDepth] will never return true.<br />
+		[page:Materials AlwaysDepth] will always return true.<br />
+		[page:Materials LessDepth] will return true if the incoming pixel Z-depth is less than the current buffer Z-depth.<br />
+		[page:Materials LessEqualDepth] is the default and will return true if the incoming pixel Z-depth is less than or equal to the current buffer Z-depth.<br />
+		[page:Materials GreaterEqualDepth] will return true if the incoming pixel Z-depth is greater than or equal to the current buffer Z-depth.<br />
+		[page:Materials GreaterDepth] will return true if the incoming pixel Z-depth is greater than the current buffer Z-depth.<br />
+		[page:Materials NotEqualDepth] will return true if the incoming pixel Z-depth is not equal to the current buffer Z-depth.<br />
+		</p>
+
+		<h2>Texture Combine Operations</h2>
+		<code>
+		THREE.MultiplyOperation
+		THREE.MixOperation
+		THREE.AddOperation
+		</code>
+		<p>
+		These define how the result of the surface's color is combined with the environment map (if present), for [page:MeshBasicMaterial.combine MeshBasicMaterial], [page:MeshLambertMaterial.combine MeshLambertMaterial] and [page:MeshPhongMaterial.combine MeshPhongMaterial]. <br />
+		[page:Constant MultiplyOperation] is the default and multiplies the environment map color with the surface color.<br />
+		[page:Constant MixOperation] uses reflectivity to blend between the two colors.<br />
+		[page:Constant AddOperation] adds the two colors.
+		</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/constants.js src/constants.js]
+	</body>
+</html>

+ 76 - 0
docs/api/zh/constants/Renderer.html

@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>WebGLRenderer Constants</h1>
+
+		<h2>Cull Face Modes</h2>
+		<code>
+		THREE.CullFaceNone
+		THREE.CullFaceBack
+		THREE.CullFaceFront
+		THREE.CullFaceFrontBack
+		</code>
+		<p>
+		[page:constant CullFaceNone] disables face culling.<br />
+		[page:constant CullFaceBack] culls back faces (default).<br />
+		[page:constant CullFaceFront] culls front faces.<br />
+		[page:constant CullFaceFrontBack] culls both front and back faces.
+		</p>
+
+		<h2>Front Face Direction</h2>
+		<code>
+		THREE.FrontFaceDirectionCW
+		THREE.FrontFaceDirectionCCW
+		</code>
+		<p>
+		[page:constant FrontFaceDirectionCW] sets the winding order for polygons to clockwise.<br />
+		[page:constant FrontFaceDirectionCCW] sets the winding order for polygons to counter-clockwise (default).
+		</p>
+
+		<h2>Shadow Types</h2>
+		<code>
+		THREE.BasicShadowMap
+		THREE.PCFShadowMap
+		THREE.PCFSoftShadowMap
+		</code>
+		<p>
+		These define the WebGLRenderer's [page:WebGLRenderer.shadowMap.type shadowMap.type] property.<br /><br />
+
+		[page:constant BasicShadowMap] gives unfiltered shadow maps - fastest, but lowest quality.<br />
+		[page:constant PCFShadowMap] filters shadow maps using the Percentage-Closer Filtering (PCF) algorithm (default).<br />
+		[page:constant PCFSoftShadowMap] filters shadow maps using the Percentage-Closer Soft Shadows (PCSS) algorithm.
+		</p>
+
+		<h2>Tone Mapping</h2>
+		<code>
+		THREE.NoToneMapping
+		THREE.LinearToneMapping
+		THREE.ReinhardToneMapping
+		THREE.Uncharted2ToneMapping
+		THREE.CineonToneMapping
+		</code>
+		<p>
+		These define the WebGLRenderer's [page:WebGLRenderer.toneMapping toneMapping] property.
+		This is used to approximate the appearance of high dynamic range (HDR) on the
+		low dynamic range medium of a standard computer monitor or mobile device's screen.<br /><br />
+
+		[page:constant NoToneMapping] disables tone mapping.<br />
+		[page:constant LinearToneMapping] is the default.<br /><br />
+
+		See the [example:webgl_tonemapping WebGL / tonemapping] example.
+
+		</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/constants.js src/constants.js]
+	</body>
+</html>

+ 268 - 0
docs/api/zh/constants/Textures.html

@@ -0,0 +1,268 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>Texture Constants</h1>
+
+		<h2>Mapping Modes</h2>
+		<code>
+		THREE.UVMapping
+		THREE.CubeReflectionMapping
+		THREE.CubeRefractionMapping
+		THREE.EquirectangularReflectionMapping
+		THREE.EquirectangularRefractionMapping
+		THREE.SphericalReflectionMapping
+		THREE.CubeUVReflectionMapping
+		THREE.CubeUVRefractionMapping
+		</code>
+
+		<p>
+		These define the texture's mapping mode.<br />
+		[page:Constant UVMapping] is the default, and maps the texture using the mesh's UV coordinates.<br /><br />
+
+		The rest define environment mapping types.<br /><br />
+
+		[page:Constant CubeReflectionMapping] and [page:Constant CubeRefractionMapping] are for
+		use with a [page:CubeTexture CubeTexture], which is made up of six textures, one for each face of the cube.
+		[page:Constant CubeReflectionMapping] is the default for a [page:CubeTexture CubeTexture]. <br /><br />
+
+		[page:Constant EquirectangularReflectionMapping] and [page:Constant EquirectangularRefractionMapping]
+		are for use with an equirectangular environment map.  Also called a lat-long map, an equirectangular
+		texture represents a 360-degree view along the horizontal centerline, and a 180-degree view along the
+		vertical axis, with the top and bottom edges of the image corresponding to the north and south poles
+		of a mapped sphere.<br /><br />
+
+		[page:Constant SphericalReflectionMapping] is for use with a spherical reflection map such as may be obtained
+		by cropping a photograph of a mirrored ball.  Sphere maps will be rendered "facing" the camera, irrespective
+		of the position of the camera relative to the cubemapped object or surface.<br /><br />
+
+		See the [example:webgl_materials_envmaps materials / envmaps] example.
+		</p>
+
+
+		<h2>Wrapping Modes</h2>
+		<code>
+		THREE.RepeatWrapping
+		THREE.ClampToEdgeWrapping
+		THREE.MirroredRepeatWrapping
+		</code>
+		<p>
+		These define the texture's [page:Texture.wrapS wrapS] and [page:Texture.wrapT wrapT] properties,
+		which define horizontal and vertical texture wrapping.<br /><br />
+
+		With [page:constant RepeatWrapping] the texture will simply repeat to infinity.<br /><br />
+
+		[page:constant ClampToEdgeWrapping] is the default.
+		The last pixel of the texture stretches to the edge of the mesh.<br /><br />
+
+		With [page:constant MirroredRepeatWrapping] the texture will repeats to infinity, mirroring on each repeat.
+		</p>
+
+		<h2>Magnification Filters</h2>
+		<code>
+		THREE.NearestFilter
+		THREE.LinearFilter
+		</code>
+
+		<p>
+		For use with a texture's [page:Texture.magFilter magFilter]	property,
+		these define the texture magnification function to be used when the pixel being textured maps to an
+		area less than or equal to one texture element (texel).<br /><br />
+
+		[page:constant NearestFilter] returns the value of the texture element that is nearest
+		(in Manhattan distance) to the specified texture coordinates.<br /><br />
+
+		[page:constant LinearFilter] is the default and returns the weighted average
+		of the four texture elements that are closest to the specified texture coordinates,
+		and can include items wrapped or repeated from other parts of a texture,
+		depending on the values of [page:Texture.wrapS wrapS] and [page:Texture.wrapT wrapT], and on the exact mapping.
+		</p>
+
+		<h2>Minification Filters</h2>
+		<code>
+		THREE.NearestFilter
+		THREE.NearestMipMapNearestFilter
+		THREE.NearestMipMapLinearFilter
+		THREE.LinearFilter
+		THREE.LinearMipMapNearestFilter
+		THREE.LinearMipMapLinearFilter
+		</code>
+
+		<p>
+		For use with a texture's [page:Texture.minFilter minFilter]	property, these define
+		the texture minifying function that is used whenever the pixel being textured maps
+		to an area greater than one texture element (texel).<br /><br />
+
+		In addition to [page:constant NearestFilter] and [page:constant LinearFilter],
+		the following four functions can be used for minification:<br /><br />
+
+		[page:constant NearestMipMapNearestFilter] chooses the mipmap that most closely
+		matches the size of the pixel being textured
+		and uses the [page:constant NearestFilter] criterion (the texel nearest to the
+		center of the pixel) to produce a texture value.<br /><br />
+
+		[page:constant NearestMipMapLinearFilter] chooses the two mipmaps that most closely
+		match the size of the pixel being textured and uses the [page:constant NearestFilter] criterion to produce
+		a texture value from each mipmap. The final texture value is a weighted average of those two values.<br /><br />
+
+		[page:constant LinearMipMapNearestFilter] chooses the mipmap that most closely matches
+		the size of the pixel being textured and uses the [page:constant LinearFilter] criterion
+		(a weighted average of the four texels that are closest to the center of the pixel)
+		to produce a texture value.<br /><br />
+
+		[page:constant LinearMipMapLinearFilter] is the default and chooses the two mipmaps
+		that most closely match the size of the pixel being textured and uses the [page:constant LinearFilter] criterion
+		to produce a texture value from each mipmap. The final texture value is a weighted average of those two values.<br /><br />
+
+		See the [example:webgl_materials_texture_filters materials / texture / filters] example.
+		</p>
+
+		<h2>Types</h2>
+		<code>
+		THREE.UnsignedByteType
+		THREE.ByteType
+		THREE.ShortType
+		THREE.UnsignedShortType
+		THREE.IntType
+		THREE.UnsignedIntType
+		THREE.FloatType
+		THREE.HalfFloatType
+		THREE.UnsignedShort4444Type
+		THREE.UnsignedShort5551Type
+		THREE.UnsignedShort565Type
+		THREE.UnsignedInt248Type
+		</code>
+		<p>
+		For use with a texture's [page:Texture.type type]	property, which must correspond to the correct format. See below for details.<br /><br />
+
+		[page:constant UnsignedByteType] is the default.
+		</p>
+
+		<h2>Formats</h2>
+		<code>
+		THREE.AlphaFormat
+		THREE.RGBFormat
+		THREE.RGBAFormat
+		THREE.LuminanceFormat
+		THREE.LuminanceAlphaFormat
+		THREE.RGBEFormat
+		THREE.DepthFormat
+		THREE.DepthStencilFormat
+		</code>
+		<p>
+		For use with a texture's [page:Texture.format format]	property, these define
+		how elements of a 2d texture, or *texels*, are read by shaders.<br /><br />
+
+		[page:constant AlphaFormat] discards the red, green and blue components and reads just the alpha component.<br /><br />
+
+		[page:constant RGBFormat] discards the alpha components and reads the red, green and blue components.<br /><br />
+
+		[page:constant RGBAFormat] is the default and reads the red, green, blue and alpha components.<br /><br />
+
+		[page:constant LuminanceFormat] reads each element as a single luminance component.
+		 This is then converted to a floating point, clamped to the range [0,1], and then assembled
+		 into an RGBA element by placing the luminance value in the red, green and blue channels,
+		 and attaching 1.0 to the alpha channel.<br /><br />
+
+		[page:constant LuminanceAlphaFormat] reads each element as a luminance/alpha double.
+		The same process occurs as for the [page:constant LuminanceFormat], except that the
+		alpha channel may have values other than *1.0*.<br /><br />
+
+		[page:constant RGBEFormat] is identical to [page:constant RGBAFormat].<br /><br />
+
+		[page:constant DepthFormat] reads each element as a single depth value, converts it to floating point, and clamps to the range [0,1].
+		This is the default for [page:DepthTexture DepthTexture].<br /><br />
+
+		[page:constant DepthStencilFormat] reads each element is a pair of depth and stencil values.
+		The depth component of the pair is interpreted as in [page:constant DepthFormat].
+		The stencil component is interpreted based on the depth + stencil internal format.
+		<br /><br />
+
+		Note that the texture must have the correct [page:Texture.type type] set, as described above.
+		See [link:https://developer.mozilla.org/en/docs/Web/API/WebGLRenderingContext/texImage2D WebGLRenderingContext.texImage2D] for details.
+		</p>
+
+		<h2>DDS / ST3C Compressed Texture Formats</h2>
+		<code>
+		THREE.RGB_S3TC_DXT1_Format
+		THREE.RGBA_S3TC_DXT1_Format
+		THREE.RGBA_S3TC_DXT3_Format
+		THREE.RGBA_S3TC_DXT5_Format
+		</code>
+		<p>
+		For use with a [page:CompressedTexture CompressedTexture]'s [page:Texture.format format]	property,
+		these require support for the
+		[link:https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/ WEBGL_compressed_texture_s3tc]
+		extension. <br /><br />
+
+		There are four [link:https://en.wikipedia.org/wiki/S3_Texture_Compression S3TC] formats available via this extension. These are:<br />
+		[page:constant RGB_S3TC_DXT1_Format]: A DXT1-compressed image in an RGB image format.<br />
+		[page:constant RGBA_S3TC_DXT1_Format]: A DXT1-compressed image in an RGB image format with a simple on/off alpha value.<br />
+		[page:constant RGBA_S3TC_DXT3_Format]: A DXT3-compressed image in an RGBA image format. Compared to a 32-bit RGBA texture, it offers 4:1 compression.<br />
+		[page:constant RGBA_S3TC_DXT5_Format]: A DXT5-compressed image in an RGBA image format. It also provides a 4:1 compression, but differs to the DXT3 compression in how the alpha compression is done.<br />
+		</p>
+
+		<h2>PVRTC Compressed Texture Formats</h2>
+		<code>
+		THREE.RGB_PVRTC_4BPPV1_Format
+		THREE.RGB_PVRTC_2BPPV1_Format
+		THREE.RGBA_PVRTC_4BPPV1_Format
+		THREE.RGBA_PVRTC_2BPPV1_Format
+		</code>
+		<p>
+		For use with a [page:CompressedTexture CompressedTexture]'s [page:Texture.format format]	property,
+		these require support for the [link:https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/ WEBGL_compressed_texture_pvrtc]
+		extension. <br />
+		PVRTC is typically only available on mobile devices with PowerVR chipsets, which are mainly Apple devices.<br /><br />
+
+		There are four [link:https://en.wikipedia.org/wiki/PVRTC PVRTC] formats available via this extension. These are:<br />
+		[page:constant RGB_PVRTC_4BPPV1_Format]: RGB compression in 4-bit mode. One block for each 4×4 pixels.<br />
+		[page:constant RGB_PVRTC_2BPPV1_Format]: RGB compression in 2-bit mode. One block for each 8×4 pixels.<br />
+		[page:constant RGBA_PVRTC_4BPPV1_Format]: RGBA compression in 4-bit mode. One block for each 4×4 pixels.<br />
+		[page:constant RGBA_PVRTC_2BPPV1_Format]: RGBA compression in 2-bit mode. One block for each 8×4 pixels.<br />
+		</p>
+
+		<h2>ETC Compressed Texture Format</h2>
+		<code>
+		THREE.RGB_ETC1_Format
+		</code>
+		<p>
+		For use with a [page:CompressedTexture CompressedTexture]'s [page:Texture.format format]	property,
+		these require support for the [link:https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc1/ WEBGL_compressed_texture_etc1]
+		extension. <br /><br />
+		</p>
+
+		<h2>Encoding</h2>
+		<code>
+		THREE.LinearEncoding
+		THREE.sRGBEncoding
+		THREE.GammaEncoding
+		THREE.RGBEEncoding
+		THREE.LogLuvEncoding
+		THREE.RGBM7Encoding
+		THREE.RGBM16Encoding
+		THREE.RGBDEncoding
+		THREE.BasicDepthPacking
+		THREE.RGBADepthPacking
+		</code>
+		<p>
+		For use with a Texture's [page:Texture.encoding encoding]	property.<br /><br />
+
+		If the encoding type is changed after the texture has already been used by a material,
+		you will need to set [page:Material.needsUpdate Material.needsUpdate] to *true* to make the material recompile.<br /><br />
+
+		[page:constant LinearEncoding] is the default.
+		Values other than this are only valid for a material's map, envMap and emissiveMap.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/constants.js src/constants.js]
+	</body>
+</html>

+ 215 - 0
docs/api/zh/core/BufferAttribute.html

@@ -0,0 +1,215 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+		This class stores data for an attribute (such as vertex positions, face indices, normals,
+		colors, UVs, and any custom attributes ) associated with a [page:BufferGeometry], which allows
+		for more efficient passing of data to the GPU. See that page for details and a usage example.<br /><br />
+
+		Data is stored as vectors of any length (defined by [page:BufferAttribute.itemSize itemSize]),
+		and in general in the methods outlined below if passing in an index, this is automatically
+		multiplied by the vector length.
+		</p>
+
+		<h2>Constructor</h2>
+		<h3>[name]( [param:TypedArray array], [param:Integer itemSize], [param:Boolean normalized] )</h3>
+		<p>
+		[page:TypedArray array] -- Must be a [link:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/TypedArray TypedArray].
+		Used to instantiate the buffer. <br />
+		This array should have
+	 	<code>itemSize * numVertices</code>
+		elements, where numVertices is the number of vertices in the associated [page:BufferGeometry BufferGeometry].<br /><br />
+
+
+		[page:Integer itemSize] --  the number of values of the array that should be associated with
+		a particular vertex. For instance, if this
+		attribute is storing a 3-component vector (such as a position, normal, or color), then itemSize should be 3.
+		<br /><br />
+
+		[page:Boolean normalized] -- (optional) Indicates how the underlying data in the buffer maps
+		to the values in the GLSL code. For instance, if [page:TypedArray array] is an instance of
+		UInt16Array, and [page:Boolean normalized] is true, the values 0 - +65535 in the array
+		 data will be mapped to 0.0f - +1.0f in the GLSL attribute. An Int16Array (signed) would map
+		 from -32767 - +32767  to -1.0f - +1.0f. If [page:Boolean normalized] is false, the values
+		 will be converted to floats which contain the exact value, i.e. 32767 becomes 32767.0f.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:TypedArray array]</h3>
+		<p>
+		The [page:TypedArray array] holding data stored in the buffer.
+		</p>
+
+		<h3>[property:Integer count]</h3>
+		<p>
+		Stores the [page:BufferAttribute.array array]'s length divided by the [page:BufferAttribute.itemSize itemSize].<br /><br />
+
+		If the buffer is storing a 3-component vector (such as a position, normal, or color),
+		then this will count the number of such vectors stored.
+		</p>
+
+		<h3>[property:Boolean dynamic]</h3>
+		<p>
+			Whether the buffer is dynamic or not. Default is *false*.<br />
+
+			If false, the GPU is informed that contents of the buffer are likely to be used often and not change often.
+			This corresponds to the  [link:https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bufferData gl.STATIC_DRAW] flag.<br />
+			if true, the GPU is informed that contents of the buffer are likely to be used often and change often.
+			This corresponds to the  [link:https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bufferData gl.DYNAMIC_DRAW] flag.
+		</p>
+
+		<h3>[property:Boolean isBufferAttribute]</h3>
+		<p>
+			Used to check whether this or derived classes are BufferAttributes. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</p>
+
+		<h3>[property:Integer itemSize]</h3>
+		<p>The length of vectors that are being stored in the [page:BufferAttribute.array array].</p>
+
+		<h3>[property:String name]</h3>
+		<p>
+		Optional name for this attribute instance. Default is an empty string.
+		</p>
+
+		<h3>[property:Boolean needsUpdate]</h3>
+		<p>
+		Flag to indicate that this attribute has changed and should be re-sent to the GPU.
+		Set this to true when you modify the value of the array.<br /><br />
+
+		Setting this to true also increments the [page:BufferAttribute.version version].
+		</p>
+
+		<h3>[property:Boolean normalized]</h3>
+		<p>
+		Indicates how the underlying data in the buffer maps to the values in the GLSL shader code.
+		See the constructor above for details.
+		</p>
+
+		<h3>[property:Function onUploadCallback]</h3>
+		<p>
+		A callback function that is executed after the Renderer has transfered the attribute array data to the GPU.
+		</p>
+
+		<h3>[property:Object updateRange]</h3>
+		<p>Object containing:<br />
+			[page:Integer offset]: Default is *0*. Position at whcih to start update.<br />
+			[page:Integer count]: Default is *-1*, which means don't use update ranges. <br /><br />
+
+			This can be used to only update some components of stored vectors (for example, just the component
+			related to color).
+		</p>
+
+		<h3>[property:Integer version]</h3>
+		<p>A version number, incremented every time the [page:BufferAttribute.needsUpdate needsUpdate] property is set to true.</p>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:BufferAttribute clone]() </h3>
+		<p>Return a copy of this bufferAttribute.</p>
+
+		<h3>[method:BufferAttribute copyArray]( array ) </h3>
+		<p>Copy the array given here (which can be a normal array or TypedArray) into
+			[page:BufferAttribute.array array].<br /><br />
+
+			See [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set TypedArray.set]
+			for notes on requirements if copying a TypedArray.
+		</p>
+
+		<h3>[method:null copyAt] ( [param:Integer index1], [param:BufferAttribute bufferAttribute], [param:Integer index2] ) </h3>
+		<p>Copy a vector from bufferAttribute[index2] to [page:BufferAttribute.array array][index1].</p>
+
+		<h3>[method:BufferAttribute copyColorsArray]( [param:Array colors] ) </h3>
+		<p>Copy an array representing RGB color values into [page:BufferAttribute.array array].</p>
+
+		<h3>[method:BufferAttribute copyVector2sArray]( [param:Array vectors] ) </h3>
+		<p>Copy an array representing [page:Vector2]s into [page:BufferAttribute.array array].</p>
+
+		<h3>[method:BufferAttribute copyVector3sArray]( [param:Array vectors] ) </h3>
+		<p>Copy an array representing [page:Vector3]s into [page:BufferAttribute.array array].</p>
+
+		<h3>[method:BufferAttribute copyVector4sArray]( [param:Array vectors] ) </h3>
+		<p>Copy an array representing [page:Vector4]s into [page:BufferAttribute.array array].</p>
+
+		<h3>[method:Number getX]( [param:Integer index] ) </h3>
+		<p>Returns the x component of the vector at the given index.</p>
+
+		<h3>[method:Number getY]( [param:Integer index] ) </h3>
+		<p>Returns the y component of the vector at the given index.</p>
+
+		<h3>[method:Number getZ]( [param:Integer index] ) </h3>
+		<p>Returns the z component of the vector at the given index.</p>
+
+		<h3>[method:Number getW]( [param:Integer index] ) </h3>
+		<p>Returns the w component of the vector at the given index.</p>
+
+		<h3>[method:null onUpload]( [param:Function callback] ) </h3>
+		<p>
+		Sets the value of the onUploadCallback property.<br /><br />
+
+		In the [example:webgl_buffergeometry WebGL / Buffergeometry] this is used to free memory
+		after the buffer has been	transfered to the GPU.
+		</p>
+
+		<h3>[method:BufferAttribute set] ( [param:Array value], [param:Integer offset] ) </h3>
+		<p>
+		value -- an [page:Array] or [page:TypedArray] from which to copy values. <br />
+		offset -- (optional) index of the [page:BufferAttribute.array array] at which to start copying.<br /><br />
+
+		Calls	[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set TypedArray.set]( [page:Array value], [page:Integer offset] )
+		on the [page:BufferAttribute.array array].<br /><br />
+
+		In particular, see that page for requirements on [page:Array value]
+		being a [page:TypedArray].
+		</p>
+
+		<h3>[method:BufferAttribute setArray] ( [param:TypedArray array] ) </h3>
+		<p>
+		[page:BufferAttribute.array array] to the TypedArray passed in here.<br /><br />
+
+		After setting the array, [page:BufferAttribute.needsUpdate needsUpdate] should be set to true.
+		</p>
+
+		<h3>[method:BufferAttribute setDynamic] ( [param:Boolean value] ) </h3>
+		<p>Set [page:BufferAttribute.dynamic dynamic] to value.</p>
+
+		<h3>[method:BufferAttribute setX]( [param:Integer index], [param:Float x] ) </h3>
+		<p>Sets the x component of the vector at the given index.</p>
+
+		<h3>[method:BufferAttribute setY]( [param:Integer index], [param:Float y] ) </h3>
+		<p>Sets the y component of the vector at the given index.</p>
+
+		<h3>[method:BufferAttribute setZ]( [param:Integer index], [param:Float z] ) </h3>
+		<p>Sets the z component of the vector at the given index.</p>
+
+		<h3>[method:BufferAttribute setW]( [param:Integer index], [param:Float w] ) </h3>
+		<p>Sets the w component of the vector at the given index.</p>
+
+		<h3>[method:BufferAttribute setXY]( [param:Integer index], [param:Float x], [param:Float y] ) </h3>
+		<p>Sets the x and y components of the vector at the given index.</p>
+
+		<h3>[method:BufferAttribute setXYZ]( [param:Integer index], [param:Float x], [param:Float y], [param:Float z] ) </h3>
+		<p>Sets the x, y and z components of the vector at the given index.</p>
+
+		<h3>[method:BufferAttribute setXYZW]( [param:Integer index], [param:Float x], [param:Float y], [param:Float z], [param:Float w] ) </h3>
+		<p>Sets the x, y, z and w components of the vector at the given index.</p>
+
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 362 - 0
docs/api/zh/core/BufferGeometry.html

@@ -0,0 +1,362 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p>
+		An efficient representation of mesh, line, or point geometry. Includes vertex positions, face
+		indices, normals, colors, UVs, and custom attributes within buffers, reducing the cost of
+		passing all this data to the GPU.
+		</p>
+		<p>
+		To read and edit data in BufferGeometry attributes, see [page:BufferAttribute] documentation.
+		</p>
+		<p>
+		For a less efficient but easier-to-use representation of geometry, see [page:Geometry].
+		</p>
+
+		<h2>Example</h2>
+		<code>
+		var geometry = new THREE.BufferGeometry();
+		// create a simple square shape. We duplicate the top left and bottom right
+		// vertices because each vertex needs to appear once per triangle.
+		var vertices = new Float32Array( [
+			-1.0, -1.0,  1.0,
+			 1.0, -1.0,  1.0,
+			 1.0,  1.0,  1.0,
+
+			 1.0,  1.0,  1.0,
+			-1.0,  1.0,  1.0,
+			-1.0, -1.0,  1.0
+		] );
+
+		// itemSize = 3 because there are 3 values (components) per vertex
+		geometry.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
+		var material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
+		var mesh = new THREE.Mesh( geometry, material );
+		</code>
+		<p>
+			[example:webgl_buffergeometry Mesh with non-indexed faces]<br />
+			[example:webgl_buffergeometry_indexed Mesh with indexed faces]<br />
+			[example:webgl_buffergeometry_lines Lines]<br />
+			[example:webgl_buffergeometry_lines_indexed Indexed Lines]<br />
+			[example:webgl_buffergeometry_custom_attributes_particles Particles]<br />
+			[example:webgl_buffergeometry_rawshader Raw Shaders]
+		</p>
+
+
+		<h2>Accessing Attributes</h2>
+		<p>
+		WebGL stores data associated with individual vertices of a geometry in <em>attributes</em>.
+		Examples include the position of the vertex, the normal vector for the vertex, the vertex color,
+		and so on. When using [page:Geometry], the [page:WebGLRenderer renderer] takes care of wrapping
+		up this information into typed array buffers and sending this data to the shader. With
+		BufferGeometry, all of this data is stored in buffers associated with individual attributes.
+		This means that to get the position data associated with a vertex (for instance), you must call
+		[page:.getAttribute] to access the 'position' [page:BufferAttribute attribute], then access the individual
+		x, y, and z coordinates of the position.
+		</p>
+		<p>
+		The following attributes are set by various members of this class:
+		</p>
+		<h3>[page:BufferAttribute position] (itemSize: 3)</h3>
+		<p>
+		Stores the x, y, and z coordinates of each vertex in this geometry. Set by [page:.fromGeometry]().
+		</p>
+
+		<h3>[page:BufferAttribute normal] (itemSize: 3)</h3>
+		<p>
+		Stores the x, y, and z components of the vertex normal vector of each vertex in this geometry.
+		Set by [page:.fromGeometry]().
+		</p>
+
+		<h3>[page:BufferAttribute color] (itemSize: 3)</h3>
+		<p>
+		Stores the red, green, and blue channels of vertex color of each vertex in this geometry.
+		Set by [page:.fromGeometry]().
+		</p>
+
+		<p>
+		In addition to the the built-in attributes, you can set your own custom attributes using the addAttribute method. With [page:Geometry], these attributes are set and stored on the [page:Material]. In BufferGeometry, the attributes are stored with the geometry itself. Note that you still need to set the attributes information on the material as well, but the value of each attribute is stored in the BufferGeometry.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]()</h3>
+		<div>
+		This creates a new [name]. It also sets several properties to a default value.
+		</div>
+
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object attributes]</h3>
+		<p>
+		This hashmap has as id the name of the attribute to be set and as value the [page:BufferAttribute buffer] to set it to.
+		Rather than accessing this property directly, use [page:.addAttribute] and [page:.getAttribute] to access attributes of this geometry.
+		</p>
+
+		<h3>[property:Box3 boundingBox]</h3>
+		<p>
+			Bounding box for the bufferGeometry, which can be calculated with
+			[page:.computeBoundingBox](). Default is *null*.
+		</p>
+
+		<h3>[property:Sphere boundingSphere]</h3>
+		<p>
+			Bounding sphere for the bufferGeometry, which can be calculated with
+			[page:.computeBoundingSphere](). Default is *null*.
+		</p>
+
+		<h3>[property:Object drawRange]</h3>
+		<p>
+			Used to determine what part of the geometry should be rendered. This should not
+			be set directly, instead use [page:.setDrawRange].<br />
+			Default is
+			<code>
+				{ start: 0, count: Infinity }
+			</code>
+		</p>
+
+		<h3>[property:Array groups]</h3>
+		<p>
+			Split the geometry into groups, each of which will be rendered in a separate WebGL draw call.
+			This allows an array of materials to be used with the bufferGeometry.<br /><br />
+
+			Each group is an object of the form:
+			<code>{ start: Integer, count: Integer, materialIndex: Integer }</code>
+			where start specifies the first element in this draw call – the first vertex for non-indexed geometry,
+			otherwise the first triangle index. Count specifies how many vertices (or indices) are included, and
+			materialIndex specifies the material array index to use.<br /><br />
+
+			Use [page:.addGroup] to add groups, rather than modifying this array directly.
+		</p>
+
+
+		<!-- Note: groups used to be called drawCalls
+
+		<h3>[property:Array drawcalls]</h3>
+		<p>
+		For geometries that use indexed triangles, this Array can be used to split the object
+		into multiple WebGL draw calls. Each draw call will draw some subset of the vertices
+		in this geometry using the configured [page:Material shader]. This may be necessary if,
+		for instance, you have more than 65535 vertices in your object.
+		</p> -->
+
+
+		<h3>[property:Integer id]</h3>
+		<p>Unique number for this bufferGeometry instance.</p>
+
+		<h3>[property:BufferAttribute index]</h3>
+		<p>
+			Allows for vertices to be re-used across multiple triangles; this is called using "indexed triangles" and
+			works much the same as it does in [page:Geometry]: each triangle is associated with the indices of three vertices.
+			This attribute therefore stores the index of each vertex for each triangular face.
+
+			If this attribute is not set, the [page:WebGLRenderer renderer] assumes that each three contiguous
+			positions represent a single triangle.
+
+			Default is *null*.
+		</p>
+
+		<h3>[property:Boolean isBufferGeometry]</h3>
+		<p>
+			Used to check whether this or derived classes are BufferGeometries. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</p>
+
+		<h3>[property:Object morphAttributes]</h3>
+		<p>
+			Hashmap of [page:BufferAttribute]s holding details of the geometry's [page:Geometry.morphTargets morphTargets].
+		</p>
+
+		<h3>[property:String name]</h3>
+		<p>
+		Optional name for this bufferGeometry instance. Default is an empty string.
+		</p>
+
+		<h3>[property:Object userData]</h3>
+		<p>
+		An object that can be used to store custom data about the BufferGeometry. It should not hold
+		references to functions as these will not be cloned.
+		</p>
+
+		<h3>[property:String uuid]</h3>
+		<p>
+		[link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] of this object instance.
+		This gets automatically assigned and shouldn't be edited.
+		</p>
+
+		<h2>Methods</h2>
+
+		<h3>[page:EventDispatcher EventDispatcher] methods are available on this class.</h3>
+
+		<h3>[method:BufferGeometry addAttribute]( [param:String name], [param:BufferAttribute attribute] )</h3>
+		<p>
+		Adds an attribute to this geometry. Use this rather than the attributes property,
+		because an internal hashmap of [page:.attributes] is maintained to speed up iterating over
+		attributes.
+		</p>
+
+		<h3>[method:null addGroup]( [param:Integer start], [param:Integer count], [param:Integer materialIndex] )</h3>
+		<p>
+			Adds a group to this geometry; see the [page:BufferGeometry.groups groups]
+			property for details.
+		</p>
+
+
+		<h3>[method:null applyMatrix]( [param:Matrix4 matrix] )</h3>
+		<p>Bakes matrix transform directly into vertex coordinates.</p>
+
+		<h3>[method:BufferGeometry center] ()</h3>
+		<p>Center the geometry based on the bounding box.</p>
+
+		<h3>[method:BufferGeometry clone]()</h3>
+		<p>Creates a clone of this BufferGeometry.</p>
+
+		<h3>[method:BufferGeometry copy]( [param:BufferGeometry bufferGeometry] )</h3>
+		<p>Copies another BufferGeometry to this BufferGeometry.</p>
+
+		<h3>[method:null clearGroups]( )</h3>
+		<p>Clears all groups.</p>
+
+		<h3>[method:null computeBoundingBox]()</h3>
+		<p>
+		Computes bounding box of the geometry, updating [param:.boundingBox] attribute.<br />
+		Bounding boxes aren't computed by default. They need to be explicitly computed, otherwise they are *null*.
+		</p>
+
+		<h3>[method:null computeBoundingSphere]()</h3>
+		<p>
+		Computes bounding sphere of the geometry, updating [page:.boundingSphere] attribute.<br />
+		Bounding spheres aren't computed by default. They need to be explicitly computed, otherwise they are *null*.
+		</p>
+
+		<h3>[method:null computeVertexNormals]()</h3>
+		<p>Computes vertex normals by averaging face normals.</p>
+
+		<h3>[method:null dispose]()</h3>
+		<p>
+		Disposes the object from memory. <br />
+		You need to call this when you want the BufferGeometry removed while the application is running.
+		</p>
+
+		<h3>[method:BufferGeometry fromDirectGeometry]( [param:Geometry] )</h3>
+		<p>
+			Populates this BufferGeometry with data from a [page:DirectGeometry] object containing faces. Not implemented for a line geometry.<br /><br />
+
+			Note: [page:DirectGeometry] is mainly used as an intermediary object for converting between [page:Geometry]
+			and BufferGeometry.
+		</p>
+
+		<h3>[method:BufferGeometry fromGeometry]( [param:Geometry] )</h3>
+		<p>Populates this BufferGeometry with data from a [page:Geometry] object containing faces. Not implemented for a line geometry.</p>
+
+		<h3>[method:BufferAttribute getAttribute]( [param:String name] )</h3>
+		<p>Returns the [page:BufferAttribute attribute] with the specified name.</p>
+
+		<h3>[method:BufferAttribute getIndex] ()</h3>
+		<p>Return the [page:.index] buffer.</p>
+
+		<h3>[method:BufferGeometry lookAt] ( [param:Vector3 vector] )</h3>
+		<p>
+		vector - A world vector to look at.<br /><br />
+
+		Rotates the geometry to face a point in space. This is typically done as a one time operation, and not during a loop.
+		Use [page:Object3D.lookAt] for typical real-time mesh usage.
+		</p>
+
+		<h3>[method:null merge]( [param:BufferGeometry bufferGeometry], [param:Integer offset] )</h3>
+		<p>Merge in another BufferGeometry with an optional offset of where to start merging in.</p>
+
+		<h3>[method:null normalizeNormals]()</h3>
+		<p>
+		Every normal vector in a geometry will have a magnitude of 1.
+		This will correct lighting on the geometry surfaces.
+		</p>
+
+		<h3>[method:BufferAttribute removeAttribute]( [param:String name] )</h3>
+		<p>Removes the [page:BufferAttribute attribute] with the specified name.</p>
+
+		<h3>[method:BufferGeometry rotateX] ( [param:Float radians] )</h3>
+		<p>
+		Rotate the geometry about the X axis. This is typically done as a one time operation, and not during a loop.
+    Use [page:Object3D.rotation] for typical real-time mesh rotation.
+		</p>
+
+		<h3>[method:BufferGeometry rotateY] ( [param:Float radians] )</h3>
+		<p>
+		Rotate the geometry about the Y axis. This is typically done as a one time operation, and not during a loop.
+    Use [page:Object3D.rotation] for typical real-time mesh rotation.
+		</p>
+
+		<h3>[method:BufferGeometry rotateZ] ( [param:Float radians] )</h3>
+		<p>
+		Rotate the geometry about the Z axis. This is typically done as a one time operation, and not during a loop.
+    Use [page:Object3D.rotation] for typical real-time mesh rotation.
+		</p>
+
+		<h3>[method:BufferGeometry scale] ( [param:Float x], [param:Float y], [param:Float z] )</h3>
+		<p>
+		Scale the geometry data. This is typically done as a one time operation, and not during a loop.
+		Use [page:Object3D.scale] for typical real-time mesh scaling.
+		</p>
+
+		<h3>[method:null setIndex] ( [param:BufferAttribute index] )</h3>
+		<p>Set the [page:.index] buffer.</p>
+
+		<h3>[method:null setDrawRange] ( [param:Integer start], [param:Integer count] )</h3>
+		<p>Set the [page:.drawRange] buffer. See that property for details.</p>
+
+		<h3>[method:BufferGeometry setFromObject] ( [param:Object3D object] )</h3>
+		<p>Sets the attributes for this BufferGeometry from an [page:Object3D].</p>
+
+		<h3>[method:BufferGeometry setFromPoints] ( [param:Array points] )</h3>
+		<p>Sets the attributes for this BufferGeometry from an array of points.</p>
+
+		<h3>[method:Object toJSON]()</h3>
+		<p>Returns a JSON object representation of the BufferGeometry.</p>
+
+		<h3>[method:BufferGeometry toNonIndexed]()</h3>
+		<p>Return a non-index version of an indexed BufferGeometry.</p>
+
+		<h3>[method:BufferGeometry translate] ( [param:Float x], [param:Float y], [param:Float z] )</h3>
+		<p>
+		Translate the geometry. This is typically done as a one time operation, and not during a loop.
+    Use [page:Object3D.position] for typical real-time mesh translation.
+		</p>
+
+		<h3>[method:BufferGeometry updateFromObject] ( [param:Object3D object] )</h3>
+		<div>Updates the attributes for this BufferGeometry from an [page:Object3D].</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 87 - 0
docs/api/zh/core/Clock.html

@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+		Object for keeping track of time. This uses <a href="https://developer.mozilla.org/en-US/docs/Web/API/Performance/now">performance.now()</a>
+		if it is available, otherwise it reverts to the less accurate <a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/now">Date.now()</a>.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:Boolean autoStart] )</h3>
+		<p>
+		autoStart — (optional) whether to automatically start the clock. Default is true.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Boolean autoStart]</h3>
+		<p>
+		If set, starts the clock automatically when the first update is called. Default is true.
+		</p>
+
+		<h3>[property:Float startTime]</h3>
+		<p>
+		Holds the time at which the clock's [page:Clock.start start] method was last called.
+ 		</p>
+
+
+		<h3>[property:Float oldTime]</h3>
+		<p>
+		Holds the time at which the clock's [page:Clock.start start], [page:Clock.getElapsedTime getElapsedTime] or [page:Clock.getDelta getDelta]
+		methods were last called.
+ 		</p>
+
+		<h3>[property:Float elapsedTime]</h3>
+		<p>
+		Keeps track of the total time that the clock has been running.
+ 		</p>
+
+		<h3>[property:Boolean running]</h3>
+		<p>
+		Whether the clock is running or not.
+ 		</p>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null start]()</h3>
+		<p>
+		Starts clock. Also sets the [page:Clock.startTime startTime] and [page:Clock.oldTime oldTime]
+		to the current time, sets [page:Clock.elapsedTime elapsedTime] to *0* and [page:Clock.running running] to *true*.
+		</p>
+
+		<h3>[method:null stop]()</h3>
+		<p>
+		Stops clock and sets [page:Clock.oldTime oldTime] to the current time.
+		</p>
+
+		<h3>[method:Float getElapsedTime]()</h3>
+		<p>
+		Get the seconds passed since the clock started and sets [page:Clock.oldTime oldTime] to the current time.<br />
+		If [page:Clock.autoStart autoStart] is *true* and the clock is not running, also starts the clock.
+		</p>
+
+		<h3>[method:Float getDelta]()</h3>
+		<p>
+		Get the seconds passed since the time [page:Clock.oldTime oldTime] was set and sets [page:Clock.oldTime oldTime] to the current time.<br />
+		If [page:Clock.autoStart autoStart] is *true* and the clock is not running, also starts the clock.
+		</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 108 - 0
docs/api/zh/core/DirectGeometry.html

@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+			This class is used internally to convert from [page:Geometry] to [page:BufferGeometry].
+		</p>
+
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]()</h3>
+		<p>This creates a new [name].</p>
+
+
+		<h2>Properties</h2>
+
+		<h3>[property:Integer id]</h3>
+		<p>Unique number for this [name] instance.</p>
+
+		<h3>[property:String name]</h3>
+		<p>Optional name. Default is the empty string.</p>
+
+		<h3>[property:Array type]</h3>
+		<p>String 'DirectGeometry'.</p>
+
+		<h3>[property:Array vertices]</h3>
+		<p>Initialiased as an empty array, this is populated by [page:.fromGeometry]().</p>
+
+		<h3>[property:Array normals]</h3>
+		<p>Initialiased as an empty array, this is populated by [page:.fromGeometry]().</p>
+
+		<h3>[property:Array colors]</h3>
+		<p>Initialiased as an empty array, this is populated by [page:.fromGeometry]().</p>
+
+		<h3>[property:Array uvs]</h3>
+		<p>Initialiased as an empty array, this is populated by [page:.fromGeometry]().</p>
+
+		<h3>[property:Array uvs2]</h3>
+		<p>Initialiased as an empty array, this is populated by [page:.fromGeometry]().</p>
+
+		<h3>[property:Array groups]</h3>
+		<p>Initialiased as an empty array, this is populated by [page:.fromGeometry]().</p>
+
+		<h3>[property:Array morphTargets]</h3>
+		<p>Initialiased as an empty array, this is populated by [page:.fromGeometry]().</p>
+
+		<h3>[property:Array skinWeights]</h3>
+		<p>Initialiased as an empty array, this is populated by [page:.fromGeometry]().</p>
+
+		<h3>[property:Array skinIndices]</h3>
+		<p>Initialiased as an empty array, this is populated by [page:.fromGeometry]().</p>
+
+		<h3>[property:Box3 boundingBox]</h3>
+		<p>
+			Bounding box for the bufferGeometry, which can be calculated with
+			[page:.computeBoundingBox](). Default is *null*.
+		</p>
+
+		<h3>[property:Sphere boundingSphere]</h3>
+		<p>
+			Bounding sphere for the bufferGeometry, which can be calculated with
+			[page:.computeBoundingSphere](). Default is *null*.
+		</p>
+
+		<h3>[property:Boolean verticesNeedUpdate]</h3>
+		<p>Default is false.</p>
+
+		<h3>[property:Boolean normalsNeedUpdate]</h3>
+		<p>Default is false.</p>
+
+		<h3>[property:Boolean colorsNeedUpdate]</h3>
+		<p>Default is false.</p>
+
+		<h3>[property:Boolean uvsNeedUpdate]</h3>
+		<p>Default is false.</p>
+
+		<h3>[property:Boolean groupsNeedUpdate]</h3>
+		<p>Default is false.</p>
+
+
+		<h2>Methods</h2>
+
+		<h3>[property:null computeGroups]( [param:Geometry geometry] )</h3>
+		<p>
+			Compute the parts of the geometry that have different materialIndex.
+			See [page:BufferGeometry.groups].
+		</p>
+
+		<h3>[property:null fromGeometry]( [param:Geometry geometry] )</h3>
+		<p>Pass in a [page:Geometry] instance for conversion.</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 100 - 0
docs/api/zh/core/EventDispatcher.html

@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+			JavaScript events for custom objects.<br />
+			[link:https://github.com/mrdoob/eventdispatcher.js Eventdispatcher on GitHub]
+		</p>
+
+		<h2>Example</h2>
+
+		<code>
+// Adding events to a custom object
+
+var Car = function () {
+
+    this.start = function () {
+
+        this.dispatchEvent( { type: 'start', message: 'vroom vroom!' } );
+
+    };
+
+};
+
+// Mixing the EventDispatcher.prototype with the custom object prototype
+
+Object.assign( Car.prototype, EventDispatcher.prototype );
+
+// Using events with the custom object
+
+var car = new Car();
+
+car.addEventListener( 'start', function ( event ) {
+
+    alert( event.message );
+
+} );
+
+car.start();
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]()</h3>
+		<p>
+		Creates EventDispatcher object.
+		</p>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null addEventListener]( [param:String type], [param:Function listener] )</h3>
+		<p>
+		type - The type of event to listen to.<br />
+		listener - The function that gets called when the event is fired.
+		</p>
+		<p>
+		Adds a listener to an event type.
+		</p>
+
+		<h3>[method:Boolean hasEventListener]( [param:String type], [param:Function listener] )</h3>
+		<p>
+		type - The type of event to listen to.<br />
+		listener - The function that gets called when the event is fired.
+		</p>
+		<p>
+		Checks if listener is added to an event type.
+		</p>
+
+		<h3>[method:null removeEventListener]( [param:String type], [param:Function listener] )</h3>
+		<p>
+		type - The type of the listener that gets removed.<br />
+		listener - The listener function that gets removed.
+		</p>
+		<p>
+		Removes a listener from an event type.
+		</p>
+
+		<h3>[method:null dispatchEvent]( [param:object event] )</h3>
+		<p>
+		event - The event that gets fired.
+		</p>
+		<p>
+		Fire an event type.
+		</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 134 - 0
docs/api/zh/core/Face3.html

@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+		Triangular face used in [page:Geometry]. These are created automatically for all
+		standard geometry types, however if you are building a custom geometry you will have to
+		create them manually.
+		</p>
+
+
+		<h2>Examples</h2>
+
+		<p>[example:misc_ubiquity_test ubiquity / test ]</p>
+		<p>[example:svg_sandbox svg / sandbox ]</p>
+		<p>[example:misc_exporter_obj exporter / obj ]</p>
+		<p>[example:webgl_shaders_vector WebGL / shaders / vector ]</p>
+
+
+		<code>
+var material = new THREE.MeshStandardMaterial( { color : 0x00cc00 } );
+
+//create a triangular geometry
+var geometry = new THREE.Geometry();
+geometry.vertices.push( new THREE.Vector3( -50, -50, 0 ) );
+geometry.vertices.push( new THREE.Vector3(  50, -50, 0 ) );
+geometry.vertices.push( new THREE.Vector3(  50,  50, 0 ) );
+
+//create a new face using vertices 0, 1, 2
+var normal = new THREE.Vector3( 0, 1, 0 ); //optional
+var color = new THREE.Color( 0xffaa00 ); //optional
+var materialIndex = 0; //optional
+var face = new THREE.Face3( 0, 1, 2, normal, color, materialIndex );
+
+//add the face to the geometry's faces array
+geometry.faces.push( face );
+
+//the face normals and vertex normals can be calculated automatically if not supplied above
+geometry.computeFaceNormals();
+geometry.computeVertexNormals();
+
+scene.add( new THREE.Mesh( geometry, material ) );
+	</code>
+
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( [param:Integer a], [param:Integer b], [param:Integer c], [param:Vector3 normal], [param:Color color], [param:Integer materialIndex] )</h3>
+		<p>
+		a — Vertex A index.<br />
+		b — Vertex B index.<br />
+		c — Vertex C index.<br /><br />
+
+		normal — (optional) Face normal ([page:Vector3 Vector3]) or array of vertex normals.
+		If a single vector is passed in, this sets [page:.normal], otherwise if an array of three
+		vectors is passed in this sets [page:.vertexNormals]<br /><br />
+
+		color — (optional) Face [page:Color color] or array of vertex [page:Color colors].
+		If a single vector is passed in, this sets [page:.color], otherwise if an array of three
+		vectors is passed in this sets [page:.vertexColors]<br /><br />
+
+		materialIndex — (optional) which index of an array of materials to associate
+		with the face.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Integer a]</h3>
+		<p>
+		Vertex A index.
+		</p>
+
+		<h3>[property:Integer b]</h3>
+		<p>
+		Vertex B index.
+		</p>
+
+		<h3>[property:Integer c]</h3>
+		<p>
+		Vertex C index.
+		</p>
+
+		<h3>[property:Vector3 normal]</h3>
+		<p>
+		Face normal - vector showing the direction of the Face3. If calculated automatically
+		(using [page:Geometry.computeFaceNormals]), this is the normalized cross product of two edges of the
+		triangle. Default is *(0, 0, 0)*.
+		</p>
+
+		<h3>[property:Color color]</h3>
+		<p>
+		Face color - for this to be used a material's [page:Material.vertexColors vertexColors] property
+		must be set to [page:Materials THREE.FaceColors].
+		</p>
+
+		<h3>[property:Array vertexNormals]</h3>
+		<p>
+		Array of 3 [page:Vector3 vertex normals].
+		</p>
+
+		<h3>[property:Array vertexColors]</h3>
+		<p>
+		Array of 3 vertex colors - for these to be used a material's [page:Material.vertexColors vertexColors] property
+		must be set to [page:Materials THREE.VertexColors].
+		</p>
+
+
+		<h3>[property:Integer materialIndex]</h3>
+		<p>
+		Material index (points to an index in the associated array of materials). Default is *0*.
+		</p>
+
+		<h2>Methods</h2>
+
+		<h3>[method:Face3 clone]()</h3>
+		<p>Creates a new clone of the Face3 object.</p>
+
+		<h3>[method:Face3 copy]( [param:Face3 face3] )</h3>
+		<p>Copy the paramaters of another Face3 into this.</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 345 - 0
docs/api/zh/core/Geometry.html

@@ -0,0 +1,345 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<div class="desc">
+		<p>
+		Geometry is a user-friendly alternative to [page:BufferGeometry]. Geometries store attributes
+		(vertex positions, faces, colors, etc.) using objects like [page:Vector3] or [page:Color] that
+		are easier to read and edit, but less efficient than typed arrays.
+		</p>
+		<p>
+		Prefer [page:BufferGeometry] for large or serious projects.
+		</p>
+		</div>
+
+
+		<h2>Example</h2>
+
+		<div>[example:webgl_geometry_minecraft WebGL / geometry / minecraft ]</div>
+		<div>[example:webgl_geometry_minecraft_ao WebGL / geometry / minecraft / ao ]</div>
+		<div>[example:webgl_geometry_nurbs WebGL / geometry / nurbs ]</div>
+		<div>[example:webgl_geometry_spline_editor WebGL / geometry / spline / editor ]</div>
+		<div>[example:webgl_interactive_cubes_gpu WebGL / interactive / cubes / gpu ]</div>
+		<div>[example:webgl_interactive_lines WebGL / interactive / lines ]</div>
+		<div>[example:webgl_interactive_raycasting_points WebGL / interactive / raycasting / points ]</div>
+		<div>[example:webgl_interactive_voxelpainter WebGL / interactive / voxelpainter ]</div>
+		<div>[example:webgl_morphnormals WebGL / morphNormals ]</div>
+
+
+		<code>var geometry = new THREE.Geometry();
+
+		geometry.vertices.push(
+			new THREE.Vector3( -10,  10, 0 ),
+			new THREE.Vector3( -10, -10, 0 ),
+			new THREE.Vector3(  10, -10, 0 )
+		);
+
+		geometry.faces.push( new THREE.Face3( 0, 1, 2 ) );
+
+		geometry.computeBoundingSphere();
+		</code>
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]()</h3>
+		<p>
+		The constructor takes no arguments.
+		</p>
+
+
+		<h2>Properties</h2>
+
+		<h3>[property:Box3 boundingBox]</h3>
+		<p>
+			Bounding box for the Geometry, which can be calculated with
+			[page:.computeBoundingBox](). Default is *null*.
+		</p>
+
+		<h3>[property:Sphere boundingSphere]</h3>
+		<p>
+			Bounding sphere for the Geometry, which can be calculated with
+			[page:.computeBoundingSphere](). Default is *null*.
+		</p>
+
+		<h3>[property:Array colors]</h3>
+		<p>
+		Array of vertex [page:Color colors], matching number and order of vertices.<br /><br />
+
+		This is used by [page:Points] and [page:Line] and any classes derived from those such as [page:LineSegments] and various helpers.
+		[page:Mesh Meshes] use [page:Face3.vertexColors] instead of this.<br /><br />
+
+		To signal an update in this array, [page:Geometry Geometry.colorsNeedUpdate] needs to be set to true.
+		</p>
+
+		<h3>[property:Array faces]</h3>
+		<p>
+		Array of [page:Face3 faces].<br />
+		The array of faces describe how each vertex in the model is connected to form faces.
+		Additionally it holds information about face and vertex normals and colors.<br /><br />
+		To signal an update in this array, [page:Geometry Geometry.elementsNeedUpdate] needs to be set to true.
+		</p>
+
+		<h3>[property:Array faceVertexUvs]</h3>
+		<p>
+		Array of face [link:https://en.wikipedia.org/wiki/UV_mapping UV] layers, used for mapping textures onto the geometry.<br />
+		Each UV layer is an array of [page:UV]s matching the order and number of vertices in faces.<br /><br />
+		To signal an update in this array, [page:Geometry Geometry.uvsNeedUpdate] needs to be set to true.
+		</p>
+
+		<h3>[property:Integer id]</h3>
+		<p>Unique number for this geometry instance.</p>
+
+		<h3>[property:Boolean isGeometry]</h3>
+		<p>
+			Used to check whether this or derived classes are Geometries. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</p>
+
+		<h3>[property:array lineDistances]</h3>
+		<p>
+		An array containing distances between vertices for Line geometries.
+		This is required for [page:LineDashedMaterial] to render correctly.
+		</p>
+
+		<h3>[property:Array morphTargets]</h3>
+		<p>
+		Array of [link:https://en.wikipedia.org/wiki/Morph_target_animation morph targets]. Each morph target is a Javascript object:
+		<code>{ name: "targetName", vertices: [ new THREE.Vector3(), ... ] }</code>
+		Morph vertices match number and order of primary vertices.
+		</p>
+
+		<h3>[property:Array morphNormals]</h3>
+		<p>
+		Array of morph normals. Morph normals have similar structure as morph targets, each normal set is a Javascript object:
+		<code>morphNormal = { name: "NormalName", normals: [ new THREE.Vector3(), ... ] }</code>
+
+		See the [example:webgl_morphnormals WebGL / morphNormals] example.
+		</p>
+
+		<h3>[property:String name]</h3>
+		<p>Optional name for this geometry. Default is an empty string.</p>
+
+		<h3>[property:Array skinWeights]</h3>
+		<p>
+		When working with a [page:SkinnedMesh], each vertex can have up to 4 [page:Bone bones] affecting it.
+		The skinWeights property is an array of weight values that correspond to the order of the vertices in
+		the geometry. So for instance, the first skinWeight would correspond to the first vertex in the geometry.
+		Since each vertex can be modified by 4 bones, a [page:Vector4] is used to represent the skin weights
+		for that vertex.
+		</p>
+		<p>
+		The values of the vector should typically be between 0 and 1. For instance when set to 0 the bone
+		transformation will have no affect. When set to 0.5 it will have 50% affect. When set to 100%, it will
+		have 100% affect. If there is only 1 bone associated with the vertex then you only need to worry about
+		the first component of the vector, the rest can be ignored and set to 0.
+		</p>
+
+		<h3>[property:Array skinIndices]</h3>
+		<p>
+		Just like the skinWeights property, the skinIndices' values correspond to the geometry's vertices.
+		Each vertex can have up to 4 bones associated with it. So if you look at the first vertex, and the
+		first skinIndex, this will tell you the bones associated with that vertex. For example the first vertex
+		could have a value of <strong>( 10.05, 30.10, 12.12 )</strong>. Then the first skin index could have the
+		value of <strong>( 10, 2, 0, 0 )</strong>. The first skin weight could have the value of
+		<strong>( 0.8, 0.2, 0, 0 )</strong>. In affect this would take the first vertex, and then the bone
+		<strong>mesh.bones[10]</strong> and apply it 80% of the way. Then it would take the bone <strong>skeleton.bones[2]</strong>
+		and apply it 20% of the way. The next two values have a weight of 0, so they would have no affect.
+		</p>
+		<p>
+		In code another example could look like this:
+		<code>
+		// e.g.
+		geometry.skinIndices[15] = new THREE.Vector4(   0,   5,   9, 10 );
+		geometry.skinWeights[15] = new THREE.Vector4( 0.2, 0.5, 0.3,  0 );
+
+		// corresponds with the following vertex
+		geometry.vertices[15];
+
+		// these bones will be used like so:
+		skeleton.bones[0]; // weight of 0.2
+		skeleton.bones[5]; // weight of 0.5
+		skeleton.bones[9]; // weight of 0.3
+		skeleton.bones[10]; // weight of 0
+		</code>
+		</p>
+
+		<h3>[property:String uuid]</h3>
+		<p>
+		[link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] of this object instance.
+		This gets automatically assigned and shouldn't be edited.
+		</p>
+
+		<h3>[property:Array vertices]</h3>
+		<p>
+		Array of [page:Vector3 vertices].<br />
+		The array of vertices holds the position of every vertex in the model.<br />
+		To signal an update in this array, [page:.verticesNeedUpdate] needs to be set to true.
+		</p>
+
+		<h3>[property:Boolean verticesNeedUpdate]</h3>
+		<p>Set to *true* if the vertices array has been updated.</p>
+
+		<h3>[property:Boolean elementsNeedUpdate]</h3>
+		<p>Set to *true* if the faces array has been updated.</p>
+
+		<h3>[property:Boolean uvsNeedUpdate]</h3>
+		<p>Set to *true* if the uvs array has been updated.	</p>
+
+		<h3>[property:Boolean normalsNeedUpdate]</h3>
+		<p>Set to *true* if the normals array has been updated.</p>
+
+		<h3>[property:Boolean colorsNeedUpdate]</h3>
+		<p>Set to *true* if the colors array or a face3 color has been updated.</p>
+
+		<h3>[property:Boolean groupsNeedUpdate]</h3>
+		<p>Set to *true* if a face3 materialIndex has been updated.</p>
+
+		<h3>[property:Boolean lineDistancesNeedUpdate]</h3>
+		<p>Set to *true* if the linedistances array has been updated.</p>
+
+
+		<h2>Methods</h2>
+
+		<h3>[page:EventDispatcher EventDispatcher] methods are available on this class.</h3>
+
+		<h3>[method:null applyMatrix]( [param:Matrix4 matrix] )</h3>
+		<p>Bakes matrix transform directly into vertex coordinates.</p>
+
+		<h3>[method:Geometry center] ()</h3>
+		<p>Center the geometry based on the bounding box.</p>
+
+		<h3>[method:Geometry clone]()</h3>
+		<p>
+		Creates a new clone of the Geometry.<br /><br />
+
+		This method copies only vertices, faces and uvs. It does not copy any other properties of the geometry.
+		</p>
+
+		<h3>[method:null computeBoundingBox]()</h3>
+		<p>Computes bounding box of the geometry, updating [page:Geometry Geometry.boundingBox] attribute.</p>
+
+		<h3>[method:null computeBoundingSphere]()</h3>
+		<p>Computes bounding sphere of the geometry, updating [page:Geometry Geometry.boundingSphere] attribute.</p>
+
+		<p>
+			Neither bounding boxes or bounding spheres are computed by default. They need to be explicitly computed,
+			otherwise they are *null*.
+		</p>
+
+		<h3>[method:null computeFaceNormals]()</h3>
+		<p>Computes [page:Face3.normal face normals].</p>
+
+		<h3>[method:null computeFlatVertexNormals]()</h3>
+		<p>Computes flat [page:Face3.vertexNormals vertex normals]. Sets the vertex normal of each vertex of each face to be the same as the face's normal.</p>
+
+		<h3>[method:null computeMorphNormals]()</h3>
+		<p>Computes [page:.morphNormals].</p>
+
+		<h3>[method:null computeVertexNormals]( [param:Boolean areaWeighted] )</h3>
+		<p>
+		areaWeighted - If true the contribution of each face normal to the vertex normal is
+		weighted by the area of the face. Default is true.<br /><br />
+
+		Computes vertex normals by averaging face normals.
+		</p>
+
+		<h3>[method:Geometry copy]( [param:Geometry geometry] )</h3>
+		<p>
+			Copies vertices, faces and uvs into this geometry. It does not copy any other properties of the geometry.
+		</p>
+
+		<h3>[method:null dispose]()</h3>
+		<p>
+		Removes The object from memory. <br />
+		Don't forget to call this method when you remove a geometry because it can cause memory leaks.
+		</p>
+
+		<h3>[method:Geometry fromBufferGeometry]( [param:BufferGeometry geometry] )</h3>
+		<p>Convert a [page:BufferGeometry] to a Geometry.</p>
+
+		<h3>[method:Geometry lookAt] ( [param:Vector3 vector] )</h3>
+		<p>
+		vector - A world vector to look at.<br /><br />
+
+		Rotates the geometry to face point in space. This is typically done as a one time operation but not during the render loop.<br>
+		Use [page:Object3D.lookAt] for typical real-time mesh usage.
+		</p>
+
+		<h3>[method:null merge]( [param:Geometry geometry], [param:Matrix4 matrix], [param:Integer materialIndexOffset] )</h3>
+		<p>Merge two geometries or geometry and geometry from object (using object's transform)</p>
+
+		<h3>[method:null mergeMesh]( [param:Mesh mesh] )</h3>
+		<p>Merge the mesh's geometry with this, also applying the mesh's transform.</p>
+
+
+		<h3>[method:null mergeVertices]()</h3>
+		<p>
+		Checks for duplicate vertices using hashmap.<br />
+		Duplicated vertices are removed and faces' vertices are updated.
+		</p>
+
+		<h3>[method:null normalize]()</h3>
+		<p>
+		Normalize the geometry. <br />
+		Make the geometry centered and have a bounding sphere of radius *1.0*.
+		</p>
+
+		<h3>[method:Geometry rotateX] ( [param:Float radians] )</h3>
+		<p>
+		Rotate the geometry about the X axis. This is typically done as a one time operation but not during the render loop.<br>
+		Use [page:Object3D.rotation] for typical real-time mesh rotation.
+		</p>
+
+		<h3>[method:Geometry rotateY] ( [param:Float radians] )</h3>
+		<p>
+		Rotate the geometry about the Y axis. This is typically done as a one time operation but not during the render loop.<br>
+    	        Use [page:Object3D.rotation] for typical real-time mesh rotation.
+		</p>
+
+		<h3>[method:Geometry rotateZ] ( [param:Float radians] )</h3>
+		<p>
+		Rotate the geometry about the Z axis. This is typically done as a one time operation but not during the render loop.<br>
+	        Use [page:Object3D.rotation] for typical real-time mesh rotation.
+		</p>
+
+		<h3>[method:Geometry setFromPoints] ( [param:Array points] )</h3>
+		<p>Sets the vertices for this Geometry from an array of points.</p>
+
+		<h3>[method:null sortFacesByMaterialIndex] (  )</h3>
+		<p>
+		Sorts the faces array according to material index. For complex geometries with several materials,
+		this can result in reduced draw calls and improved performance.
+		</p>
+
+		<h3>[method:Geometry scale] ( [param:Float x], [param:Float y], [param:Float z] )</h3>
+		<p>
+		Scale the geometry data. This is typically done as a one time operation but not during the render loop.<br>
+		Use [page:Object3D.scale] for typical real-time mesh scaling.
+		</p>
+
+		<h3>[method:JSON toJSON] ( )</h3>
+		<p>Convert the geometry to JSON format.</p>
+
+		<h3>[method:Geometry translate] ( [param:Float x], [param:Float y], [param:Float z] )</h3>
+		<p>
+		Translate the geometry. This is typically done as a one time operation but not during the render loop.<br>
+    	        Use [page:Object3D.position] for typical real-time mesh translation.
+		</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 44 - 0
docs/api/zh/core/InstancedBufferAttribute.html

@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:BufferAttribute] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+		An instanced version of [page:BufferAttribute].
+		</p>
+
+		<h2>Constructor</h2>
+		<h3>[name]( [param:TypedArray array], [param:Integer itemSize], [param:Number meshPerAttribute] )</h3>
+		<p>
+		</p>
+
+		<h2>Properties</h2>
+		See [page:BufferAttribute] for inherited properties.
+
+		<h3>[property:Number meshPerAttribute]</h3>
+		<p>
+			Default is *1*.
+		</p>
+
+		<h3>[property:Boolean isInstancedBufferAttribute]</h3>
+		<p>
+			Default is *true*.
+		</p>
+
+		<h2>Methods</h2>
+		<p>See [page:BufferAttribute] for inherited methods.</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 50 - 0
docs/api/zh/core/InstancedBufferGeometry.html

@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:BufferGeometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+		An instanced version of [page:BufferGeometry].
+		</p>
+
+		<h2>Constructor</h2>
+		<h3>[name]( )</h3>
+		<p>
+		</p>
+
+		<h2>Properties</h2>
+		See [page:BufferGeometry] for inherited properties.
+
+		<h3>[property:Number maxInstancedCount]</h3>
+		<p>
+			Default is *undefined*.
+		</p>
+
+		<h3>[property:Boolean isInstancedBufferGeometry]</h3>
+		<p>
+			Default is *true*.
+		</p>
+
+		<h2>Methods</h2>
+		<p>See [page:BufferAttribute] for inherited methods.</p>
+
+		<h3>[property:Number addGroup]( start, count, materialIndex )</h3>
+		<p>
+
+		</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 48 - 0
docs/api/zh/core/InstancedInterleavedBuffer.html

@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:InterleavedBuffer] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+		An instanced version of [page:InterleavedBuffer].
+		</p>
+
+		<h2>Constructor</h2>
+		<h3>[name]( [param:TypedArray array], [param:Integer itemSize], [param:Number meshPerAttribute] )</h3>
+		<p>
+		</p>
+
+		<h2>Properties</h2>
+		<p>
+			See [page:InterleavedBuffer] for inherited properties.
+		</p>
+
+		<h3>[property:Number meshPerAttribute]</h3>
+		<p>
+			Default is *1*.
+		</p>
+
+		<h3>[property:Boolean isInstancedInterleavedBuffer]</h3>
+		<p>
+			Default is *true*.
+		</p>
+
+		<h2>Methods</h2>
+		<p>
+			See [page:InterleavedBuffer] for inherited methods.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 119 - 0
docs/api/zh/core/InterleavedBuffer.html

@@ -0,0 +1,119 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+			"Interleaved" means that multiple attributes, possibly of different types, (e.g., position, normal, uv, color) are packed into a single array buffer.
+			<br/><br/>
+			An introduction into interleaved arrays can be found here: [link:https://blog.tojicode.com/2011/05/interleaved-array-basics.html Interleaved array basics]
+		</p>
+
+		<h2>Example</h2>
+
+		<p>[example:webgl_buffergeometry_points_interleaved webgl / buffergeometry / points / interleaved]</p>
+
+		<h2>Constructor</h2>
+		<h3>[name]( [param:TypedArray array], [param:Integer stride] )</h3>
+		<p>
+			[page:TypedArray array] -- A typed array with a shared buffer. Stores the geometry data.<br/>
+			[page:Integer stride] -- The number of typed-array elements per vertex.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Array array]</h3>
+		<p>
+			 A typed array with a shared buffer. Stores the geometry data.
+		</p>
+
+		<h3>[property:Integer stride]</h3>
+		<p>
+			The number of typed-array elements per vertex.
+		</p>
+
+		<h3>[property:Integer count]</h3>
+		<p>
+		Gives the total number of elements in the array.
+		</p>
+
+		<h3>[property:Boolean dynamic]</h3>
+		<p>
+		Default is *false*.
+		</p>
+
+		<h3>[property:Object updateRange]</h3>
+		<p>
+		Object containing offset and count.
+		</p>
+
+		<h3>[property:Number updateRange.offset]</h3>
+		<p>
+		Default is *0*.
+		</p>
+
+		<h3>[property:Number updateRange.count]</h3>
+		<p>
+		Default is *-1*.
+		</p>
+
+		<h3>[property:Integer version]</h3>
+		<p>
+		A version number, incremented every time the needsUpdate property is set to true.
+		</p>
+
+		<h3>[property:Integer isInterleavedBuffer]</h3>
+		<p>
+		Default is *true*.
+		</p>
+
+		<h3>[property:Integer needsUpdate]</h3>
+		<p>
+		Default is *false*. Setting this to true increments [page:InterleavedBuffer.version version].
+		</p>
+
+		<h2>Methods</h2>
+
+		<h3>[method:InterleavedBuffer setArray] ( [param:TypedArray array] ) </h3>
+		<p>
+		 array - must be  a Typed Array.
+		</p>
+
+		<h3>[method:InterleavedBuffer setDynamic] ( [param:Boolean value] ) </h3>
+		<p>
+			Set [page:InterleavedBuffer.dynamic dynamic] to value.
+		</p>
+
+		<h3>[method:InterleavedBuffer copy]( [param:InterleavedBuffer source] ) </h3>
+		<p>
+		 Copies another [name] to this [name].
+		</p>
+
+		<h3>[method:InterleavedBuffer copyAt]( [param:Integer index1], [param:InterleavedBuffer attribute], [param:Integer index2] ) </h3>
+		<p>Copies data from attribute[index2] to [page:InterleavedBuffer.array array][index1].</p>
+
+		<h3>[method:InterleavedBuffer set]( [param:TypedArray value], [param:Integer offset] ) </h3>
+		<p>
+			value - The source (typed) array.<br/>
+			offset - The offset into the target array at which to begin writing values from the source array. Default is *0*.<br/><br />
+
+			Stores multiple values in the buffer, reading input values from a specified array.
+		</p>
+
+		<h3>[method:InterleavedBuffer clone]() </h3>
+		<p>
+			Creates a clone of this [name].
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 104 - 0
docs/api/zh/core/InterleavedBufferAttribute.html

@@ -0,0 +1,104 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+
+		</p>
+
+		<h2>Constructor</h2>
+		<h3>[name]( [param:InterleavedBuffer interleavedBuffer], [param:Integer itemSize], [param:Integer offset], [param:Boolean normalized] )</h3>
+		<p>
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:InterleavedBuffer data]</h3>
+		<p>
+			The [page:InterleavedBuffer InterleavedBuffer] instance passed in the constructor.
+		</p>
+
+		<h3>[property:TypedArray array]</h3>
+		<p>
+			The value of [page:InterleavedBufferAttribute.data data].array.
+		</p>
+
+		<h3>[property:Integer count]</h3>
+		<p>
+			The value of [page:InterleavedBufferAttribute.data data].count.
+
+			If the buffer is storing a 3-component item (such as a position, normal, or color),
+			then this will count the number of such items stored.
+		</p>
+
+		<h3>[property:Integer itemSize]</h3>
+		<p>
+			How many values make up each item.
+		</p>
+
+		<h3>[property:Integer offset]</h3>
+		<p>
+			The offset in the underlying array buffer where an item starts.
+		</p>
+
+		<h3>[property:Boolean normalized]</h3>
+		<p>
+			Default is *true*.
+		</p>
+
+		<h3>[property:Boolean isInterleavedBufferAttribute]</h3>
+		<p>
+			Default is *true*.
+		</p>
+
+		<h2>Methods</h2>
+
+		<h3>[method:Number getX]( [param:Integer index] ) </h3>
+		<p>Returns the x component of the item at the given index.</p>
+
+		<h3>[method:Number getY]( [param:Integer index] ) </h3>
+		<p>Returns the y component of the item at the given index.</p>
+
+		<h3>[method:Number getZ]( [param:Integer index] ) </h3>
+		<p>Returns the z component of the item at the given index.</p>
+
+		<h3>[method:Number getW]( [param:Integer index] ) </h3>
+		<p>Returns the w component of the item at the given index.</p>
+
+		<h3>[method:null setX]( [param:Integer index], [param:Float x] ) </h3>
+		<p>Sets the x component of the item at the given index.</p>
+
+		<h3>[method:null setY]( [param:Integer index], [param:Float y] ) </h3>
+		<p>Sets the y component of the item at the given index.</p>
+
+		<h3>[method:null setZ]( [param:Integer index], [param:Float z] ) </h3>
+		<p>Sets the z component of the item at the given index.</p>
+
+		<h3>[method:null setW]( [param:Integer index], [param:Float w] ) </h3>
+		<p>Sets the w component of the item at the given index.</p>
+
+		<h3>[method:null setXY]( [param:Integer index], [param:Float x], [param:Float y] ) </h3>
+		<p>Sets the x and y components of the item at the given index.</p>
+
+		<h3>[method:null setXYZ]( [param:Integer index], [param:Float x], [param:Float y], [param:Float z] ) </h3>
+		<p>Sets the x, y and z components of the item at the given index.</p>
+
+		<h3>[method:null setXYZW]( [param:Integer index], [param:Float x], [param:Float y], [param:Float z], [param:Float w] ) </h3>
+		<p>Sets the x, y, z and w components of the item at the given index.</p>
+
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 82 - 0
docs/api/zh/core/Layers.html

@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+			A [page:Layers] object assigns an [page:Object3D] to 1 or more of 32 layers numbered 0 to 31
+			- internally the layers are stored as a [link:https://en.wikipedia.org/wiki/Mask_(computing) bit mask], and by default all
+			Object3Ds are a member of layer 0.<br /><br />
+
+			This can be used to control visibility - an object must share a layer with a [page:Camera camera] to be visible when that camera's
+			view is renderered.<br /><br />
+
+			All classes that inherit from [page:Object3D] have an [page:Object3D.layers] property which is an instance of this class.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]()</h3>
+		<p>
+			Create a new Layers object, with membership initially set to layer 0.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Integer mask]</h3>
+		<p>
+			A bit mask storing which of the 32 layers this layers object is currently a member of.
+		</p>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null disable]( [param:Integer layer] )</h3>
+		<p>
+			layer - an integer from 0 to 31.<br /><br />
+
+			Remove membership of this *layer*.
+		</p>
+
+		<h3>[method:null enable]( [param:Integer layer] )</h3>
+		<p>
+			layer - an integer from 0 to 31.<br /><br />
+
+			Add membership of this *layer*.
+		</p>
+
+		<h3>[method:null set]( [param:Integer layer] )</h3>
+		<p>
+			layer - an integer from 0 to 31.<br /><br />
+
+			Set membership to *layer*, and remove membership all other layers.
+		</p>
+
+		<h3>[method:Boolean test]( [param:Layers layers] )</h3>
+		<p>
+			layers - a Layers object<br /><br />
+
+			Returns true if this and the passed *layers* object are members of the same set of layers.
+		</p>
+
+		<h3>[method:null toggle]( [param:Integer layer] )</h3>
+		<p>
+			layer - an integer from 0 to 31.<br /><br />
+
+			Toggle membership of *layer*.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 438 - 0
docs/api/zh/core/Object3D.html

@@ -0,0 +1,438 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+			This is the base class for most objects in three.js and provides a set of properties and methods
+			for manipulating objects in 3D space.<br /><br />
+
+			Note that this can be used for grouping objects via the [page:.add]( object ) method
+			which adds the object as a child, however it is better to use [page:Group] for this.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]()</h3>
+		<p>
+		The constructor takes no arguments.
+		</p>
+
+
+		<h2>Properties</h2>
+
+		<h3>[property:Boolean castShadow]</h3>
+		<p>Whether the object gets rendered into shadow map. Default is *false*.</p>
+
+		<h3>[property:Object3D children]</h3>
+		<p>Array with object's children. See [page:Group] for info on manually grouping objects.</p>
+
+		<h3>[property:Boolean frustumCulled]</h3>
+		<p>
+		When this is set, it checks every frame if the object is in the frustum of the camera before rendering the object.
+		Otherwise the object gets rendered every frame even if it isn't visible. Default is *true*.
+		</p>
+
+		<h3>[property:Integer id]</h3>
+		<p>readonly – Unique number for this object instance.</p>
+
+		<h3>[property:Boolean isObject3D]</h3>
+		<p>
+			Used to check whether this or derived classes are Object3Ds. Default is *true*.<br /><br />
+
+			You should not change this, as it is used internally for optimisation.
+		</p>
+
+		<h3>[property:Layers layers]</h3>
+		<p>
+		The layer membership of the object. The object is only visible if it has at least one
+		layer in common with the [page:Camera] in use.
+		</p>
+
+		<h3>[property:Matrix4 matrix]</h3>
+		<p>The local transform matrix.</p>
+
+		<h3>[property:Boolean matrixAutoUpdate]</h3>
+		<p>
+		When this is set, it calculates the matrix of position, (rotation or quaternion) and
+		scale every frame and also recalculates the matrixWorld property. Default is [page:Object3D.DefaultMatrixAutoUpdate] (true).
+		</p>
+
+		<h3>[property:Matrix4 matrixWorld]</h3>
+		<p>
+		The global transform of the object. If the Object3D has no parent, then it's identical to
+		the local transform [page:.matrix].
+		</p>
+
+		<h3>[property:Boolean matrixWorldNeedsUpdate]</h3>
+		<p>
+		When this is set, it calculates the matrixWorld in that frame and resets this property
+		 to false. Default is *false*.
+		</p>
+
+		<h3>[property:Matrix4 modelViewMatrix]</h3>
+		<p>This is passed to the shader and used to calculate the position of the object.</p>
+
+		<h3>[property:String name]</h3>
+		<p>Optional name of the object (doesn't need to be unique). Default is an empty string.</p>
+
+		<h3>[property:Matrix3 normalMatrix]</h3>
+		<p>
+		This is passed to the shader and used to calculate lighting for the object. It is the transpose of the inverse of the upper left 3x3 sub-matrix of this object's modelViewMatrix.<br /><br />
+
+		The reason for this special matrix is that simply using the modelViewMatrix could result in a non-unit length of normals (on scaling) or in a non-perpendicular direction (on non-uniform scaling).<br /><br />
+
+		On the other hand the translation part of the modelViewMatrix is not relevant for the calculation of normals. Thus a Matrix3 is sufficient.
+		</p>
+
+		<h3>[property:function onAfterRender]</h3>
+		<p>
+		An optional callback that is executed immediately after the Object3D is rendered.
+		This function is called with the following parameters: renderer, scene, camera, geometry,
+		material, group.
+		</p>
+
+		<h3>[property:function onBeforeRender]</h3>
+		<p>
+		An optional callback that is executed immediately before the Object3D is rendered.
+		This function is called with the following parameters: renderer, scene, camera, geometry,
+		material, group.
+		</p>
+
+		<h3>[property:Object3D parent]</h3>
+		<p>Object's parent in the [link:https://en.wikipedia.org/wiki/Scene_graph scene graph]. An object can have at most
+		one parent.</p>
+
+		<h3>[property:Vector3 position]</h3>
+		<p>A [page:Vector3] representing the object's local position. Default is (0, 0, 0).</p>
+
+		<h3>[property:Quaternion quaternion]</h3>
+		<p>Object's local rotation as a [page:Quaternion Quaternion].</p>
+
+		<h3>[property:Boolean receiveShadow]</h3>
+		<p>Whether the material receives shadows. Default is *false*.</p>
+
+		<h3>[property:Number renderOrder]</h3>
+		<p>
+		This value allows the default rendering order of [link:https://en.wikipedia.org/wiki/Scene_graph scene graph]
+		objects to be overridden although opaque and transparent objects remain sorted independently.
+		Sorting is from lowest to highest renderOrder. Default value is *0*.
+		</p>
+
+		<h3>[property:Euler rotation]</h3>
+		<p>
+		Object's local rotation (see [link:https://en.wikipedia.org/wiki/Euler_angles Euler angles]), in radians.
+		</p>
+
+		<h3>[property:Vector3 scale]</h3>
+		<p>
+		The object's local scale. Default is [page:Vector3]( 1, 1, 1 ).
+		</p>
+
+		<h3>[property:Vector3 up]</h3>
+		<p>
+		This is used by the [page:.lookAt lookAt] method, for example, to determine the orientation of the result.<br />
+		Default is [page:Object3D.DefaultUp] - that is, ( 0, 1, 0 ).
+		</p>
+
+		<h3>[property:object userData]</h3>
+		<p>
+		An object that can be used to store custom data about the Object3D. It should not hold
+		references to functions as these will not be cloned.
+		</p>
+
+		<h3>[property:String uuid]</h3>
+		<p>
+		[link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] of this object instance.
+		This gets automatically assigned, so this shouldn't be edited.
+		</p>
+
+		<h3>[property:Boolean visible]</h3>
+		<p>Object gets rendered if *true*. Default is *true*.</p>
+
+
+
+
+		<h2>Static Properties</h2>
+		<p>
+			Static properties and methods are defined per class rather than per instance of that class.
+			This means that changing [page:Object3D.DefaultUp] or [page:Object3D.DefaultMatrixAutoUpdate]
+			will change the values of [page:.up up] and [page:.matrixAutoUpdate matrixAutoUpdate] for
+			<em>every</em>	instance of Object3D (or derived classes)	created after the change has
+			been made (already created Object3Ds will not be affected).
+		</p>
+
+		<h3>[property:Vector3 DefaultUp]</h3>
+		<p>
+			The default [page:.up up] direction for objects, also used as the default position for [page:DirectionalLight],
+			[page:HemisphereLight] and [page:Spotlight] (which creates lights shining from the top down).<br />
+			Set to ( 0, 1, 0 ) by default.
+		</p>
+
+		<h3>[property:Vector3 DefaultMatrixAutoUpdate]</h3>
+		<p>
+			The default setting for [page:.matrixAutoUpdate matrixAutoUpdate] for newly created Object3Ds.<br />
+
+		</p>
+
+
+		<h2>Methods</h2>
+
+		<h3>[page:EventDispatcher EventDispatcher] methods are available on this class.</h3>
+
+		<h3>[method:null add]( [param:Object3D object], ... )</h3>
+		<p>
+		Adds *object* as child of this object. An arbitrary number of objects may be added. Any current parent on an
+		object passed in here will be removed, since an object can have at most one parent.<br /><br />
+
+		See [page:Group] for info on manually grouping objects.
+		</p>
+
+		<h3>[method:null applyMatrix]( [param:Matrix4 matrix] )</h3>
+		<p>Applies the matrix transform to the object and updates the object's position, rotation and scale.</p>
+
+		<h3>[method:Object3D applyQuaternion]( [param:Quaternion quaternion] )</h3>
+		<p>Applies the rotation represented by the quaternion to the object.</p>
+
+		<h3>[method:Object3D clone]( [param:Boolean recursive] )</h3>
+		<p>
+		recursive -- if true, descendants of the object are also cloned. Default is true.<br /><br />
+
+		Returns a clone of this object and optionally all descendants.
+		</p>
+
+		<h3>[method:this copy]( [param:Object3D object], [param:Boolean recursive] )</h3>
+		<p>
+		recursive -- if true, descendants of the object are also copied. Default is true.<br /><br />
+
+		Copy the given object into this object.
+		</p>
+
+		<h3>[method:Object3D getObjectById]( [param:Integer id] )</h3>
+		<p>
+		id -- Unique number of the object instance<br /><br />
+
+		Searches through the object's children and returns the first with a matching id.<br />
+		Note that ids are assigned in chronological order: 1, 2, 3, ..., incrementing by one for each new object.
+		</p>
+
+		<h3>[method:Object3D getObjectByName]( [param:String name] )</h3>
+		<p>
+		name -- String to match to the children's Object3D.name property. <br /><br />
+
+		Searches through the object's children and returns the first with a matching name.<br />
+		Note that for most objects the name is an empty string by default. You will
+		have to set it manually to make use of this method.
+		</p>
+
+		<h3>[method:Object3D getObjectByProperty]( [param:String name], [param:Float value] )</h3>
+		<p>
+		name -- the property name to search for. <br />
+		value -- value of the given property. <br /><br />
+
+		Searches through the object's children and returns the first with a property that matches the value given.
+		</p>
+
+		<h3>[method:Vector3 getWorldPosition]( [param:Vector3 target] )</h3>
+		<p>
+		[page:Vector3 target] — the result will be copied into this Vector3. <br /><br />
+
+		Returns a vector representing the position of the object in world space.
+		</p>
+
+		<h3>[method:Quaternion getWorldQuaternion]( [param:Quaternion target] )</h3>
+		<p>
+		[page:Quaternion target] — the result will be copied into this Quaternion. <br /><br />
+
+		Returns a quaternion representing the rotation of the object in world space.
+		</p>
+
+		<h3>[method:Vector3 getWorldScale]( [param:Vector3 target] )</h3>
+		<p>
+		[page:Vector3 target] — the result will be copied into this Vector3. <br /><br />
+
+		Returns a vector of the scaling factors applied to the object for each axis in world space.
+		</p>
+
+		<h3>[method:Vector3 getWorldDirection]( [param:Vector3 target] )</h3>
+		<p>
+		[page:Vector3 target] — the result will be copied into this Vector3. <br /><br />
+
+		Returns a vector representing the direction of object's positive z-axis in world space.
+		</p>
+
+
+		<h3>[method:Vector3 localToWorld]( [param:Vector3 vector] )</h3>
+		<p>
+		vector - A vector representing a position in local (object) space.<br /><br />
+
+		Converts the vector from local space to world space.
+		</p>
+
+		<h3>[method:null lookAt]( [param:Vector3 vector] )</br>
+		[method:null lookAt]( [param:Float x], [param:Float y], [param:Float z] )</h3>
+		<p>
+		vector - A vector representing a position in world space.<br /><br />
+		Optionally, the [page:.x x], [page:.y y] and [page:.z z] components of the world space position.<br /><br />
+
+		Rotates the object to face a point in world space.<br /><br />
+
+		This method does not support objects with rotated and/or translated parent(s).
+		</p>
+
+		<h3>[method:Array raycast]( [param:Raycaster raycaster], [param:Array intersects] )</h3>
+		<p>
+		Abstract (empty) method to get intersections between a casted ray and this object.
+		Subclasses such as [page:Mesh], [page:Line], and [page:Points] implement this method in order
+		to use raycasting.
+		</p>
+
+		<h3>[method:null remove]( [param:Object3D object], ... )</h3>
+		<p>
+		Removes *object* as child of this object. An arbitrary number of objects may be removed.
+		</p>
+
+		<h3>[method:this rotateOnAxis]( [param:Vector3 axis], [param:Float angle] )</h3>
+		<p>
+		axis -- A normalized vector in object space. <br />
+		angle -- The angle in radians.<br /><br />
+
+		Rotate an object along an axis in object space. The axis is assumed to be normalized.
+		</p>
+
+		<h3>[method:this rotateOnWorldAxis]( [param:Vector3 axis], [param:Float angle] )</h3>
+		<p>
+		axis -- A normalized vector in world space. <br />
+		angle -- The angle in radians.<br /><br />
+
+		Rotate an object along an axis in world space. The axis is assumed to be normalized.
+		Method Assumes no rotated parent.
+		</p>
+
+		<h3>[method:this rotateX]( [param:Float rad] )</h3>
+		<p>
+		rad - the angle to rotate in radians.<br /><br />
+
+		Rotates the object around x axis in local space.
+		</p>
+
+		<h3>[method:this rotateY]( [param:Float rad] )</h3>
+		<p>
+		rad - the angle to rotate in radians.<br /><br />
+
+		Rotates the object around y axis in local space.
+		</p>
+
+		<h3>[method:this rotateZ]( [param:Float rad] )</h3>
+		<p>
+		rad - the angle to rotate in radians.<br /><br />
+
+		Rotates the object around z axis in local space.
+		</p>
+
+		<h3>[method:null setRotationFromAxisAngle]( [param:Vector3 axis], [param:Float angle] )</h3>
+		<p>
+			axis -- A normalized vector in object space. <br />
+			angle -- angle in radians<br /><br />
+
+			Calls [page:Quaternion.setFromAxisAngle setFromAxisAngle]( [page:Float axis], [page:Float angle] )
+			on the [page:.quaternion].
+		</p>
+
+		<h3>[method:null setRotationFromEuler]( [param:Euler euler] )</h3>
+		<p>
+			euler -- Euler angle specifying rotation amount.<br />
+
+			Calls [page:Quaternion.setRotationFromEuler setRotationFromEuler]( [page:Euler euler])
+			on the [page:.quaternion].
+		</p>
+
+		<h3>[method:null setRotationFromMatrix]( [param:Matrix4 m] )</h3>
+		<p>
+			m -- rotate the quaternion by the rotation component of the matrix.<br />
+
+			Calls [page:Quaternion.setFromRotationMatrix setFromRotationMatrix]( [page:Matrix4 m])
+			on the [page:.quaternion].<br /><br />
+
+			Note that this assumes that the upper 3x3 of m is a pure rotation matrix (i.e, unscaled).
+		</p>
+
+		<h3>[method:null setRotationFromQuaternion]( [param:Quaternion q] )</h3>
+		<p>
+			q -- normalized Quaternion.<br /><br />
+
+			Copy the given quaternion into [page:.quaternion].
+		</p>
+
+		<h3>[method:null toJSON]( [param:Quaternion q] )</h3>
+		<p>
+			Convert the object to JSON format.
+		</p>
+
+		<h3>[method:this translateOnAxis]( [param:Vector3 axis], [param:Float distance] )</h3>
+		<p>
+		axis -- A normalized vector in object space.<br />
+		distance -- The distance to translate.<br /><br />
+
+		Translate an object by distance along an axis in object space. The axis is assumed to be normalized.
+		</p>
+
+		<h3>[method:this translateX]( [param:Float distance] )</h3>
+		<p>Translates object along x axis in object space by *distance* units.</p>
+
+		<h3>[method:this translateY]( [param:Float distance] )</h3>
+		<p>Translates object along y axis in object space by *distance* units.</p>
+
+		<h3>[method:this translateZ]( [param:Float distance] )</h3>
+		<p>Translates object along z axis in object space by *distance* units.</p>
+
+		<h3>[method:null traverse]( [param:Function callback] )</h3>
+		<p>
+		callback - A function with as first argument an object3D object.<br /><br />
+
+		Executes the callback on this object and all descendants.
+		</p>
+
+		<h3>[method:null traverseVisible]( [param:Function callback] )</h3>
+		<p>
+		callback - A function with as first argument an object3D object.<br /><br />
+
+		Like traverse, but the callback will only be executed for visible objects.
+		Descendants of invisible objects are not traversed.
+		</p>
+
+		<h3>[method:null traverseAncestors]( [param:Function callback] )</h3>
+		<p>
+		callback - A function with as first argument an object3D object.<br /><br />
+
+		Executes the callback on all ancestors.
+		</p>
+
+		<h3>[method:null updateMatrix]()</h3>
+		<p>Update the local transform.</p>
+
+		<h3>[method:null updateMatrixWorld]( [param:Boolean force] )</h3>
+		<p>Update the global transform of the object and its children.</p>
+
+
+		<h3>[method:Vector3 worldToLocal]( [param:Vector3 vector] )</h3>
+		<p>
+		vector - A world vector.<br /><br />
+
+		Updates the vector from world space to local space.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 189 - 0
docs/api/zh/core/Raycaster.html

@@ -0,0 +1,189 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+		This class is designed to assist with [link:https://en.wikipedia.org/wiki/Ray_casting raycasting].
+		Raycasting is used for mouse picking (working out what objects in the 3d space the mouse is over) amongst
+		other things.
+		</p>
+
+		<h2>Example</h2>
+		<code>
+		var raycaster = new THREE.Raycaster();
+		var mouse = new THREE.Vector2();
+
+		function onMouseMove( event ) {
+
+			// calculate mouse position in normalized device coordinates
+			// (-1 to +1) for both components
+
+			mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
+			mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
+
+		}
+
+		function render() {
+
+			// update the picking ray with the camera and mouse position
+			raycaster.setFromCamera( mouse, camera );
+
+			// calculate objects intersecting the picking ray
+			var intersects = raycaster.intersectObjects( scene.children );
+
+			for ( var i = 0; i < intersects.length; i++ ) {
+
+				intersects[ i ].object.material.color.set( 0xff0000 );
+
+			}
+
+			renderer.render( scene, camera );
+
+		}
+
+		window.addEventListener( 'mousemove', onMouseMove, false );
+
+		window.requestAnimationFrame(render);
+
+		</code>
+		<div>
+			Examples: [example:webgl_interactive_cubes Raycasting to a Mesh]<br />
+			[example:webgl_interactive_cubes_ortho Raycasting to a Mesh in using an OrthographicCamera]<br />
+			[example:webgl_interactive_buffergeometry Raycasting to a Mesh with BufferGeometry]<br />
+			[example:webgl_interactive_lines Raycasting to a Line]<br />
+			[example:webgl_interactive_raycasting_points Raycasting to Points]<br />
+			[example:webgl_geometry_terrain_raycast Terrain raycasting]<br />
+			[example:webgl_octree_raycasting Raycasting using an octree]<br />
+			[example:webgl_interactive_voxelpainter Raycasting to paint voxels]<br />
+			[example:webgl_raycast_texture Raycast to a Texture]
+		</div>
+
+
+		<p>
+		</p>
+
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( [param:Vector3 origin], [param:Vector3 direction], [param:Float near], [param:Float far] ) {</h3>
+		<p>
+		[page:Vector3 origin] — The origin vector where the ray casts from.<br />
+		[page:Vector3 direction] — The direction vector that gives direction to the ray. Should be normalized.<br />
+		[page:Float near] — All results returned are further away than near. Near can't be negative. Default value is 0.<br />
+		[page:Float far] — All results returned are closer than far. Far can't be lower than near. Default value is Infinity.
+		</p>
+		<p>
+		This creates a new raycaster object.<br />
+		</p>
+
+
+		<h2>Properties</h2>
+
+		<h3>[property:float far]</h3>
+		<p>
+		The far factor of the raycaster. This value indicates which objects can be discarded based on the distance.
+		This value shouldn't be negative and should be larger than the near property.
+		</p>
+
+		<h3>[property:float linePrecision]</h3>
+		<p>
+		The precision factor of the raycaster when intersecting [page:Line] objects.
+		</p>
+
+		<h3>[property:float near]</h3>
+		<p>
+		The near factor of the raycaster. This value indicates which objects can be discarded based on the distance.
+		This value shouldn't be negative and should be smaller than the far property.
+		</p>
+
+		<h3>[property:Object params]</h3>
+		<p>
+		An object with the following properties:
+
+			<code>
+{
+	Mesh: {},
+	Line: {},
+	LOD: {},
+	Points: { threshold: 1 },
+	Sprite: {}
+}
+			</code>
+
+		</p>
+
+		<h3>[property:Ray ray]</h3>
+		<p>The [Page:Ray] used for the raycasting.</p>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null set]( [param:Vector3 origin], [param:Vector3 direction] )</h3>
+		<p>
+		[page:Vector3 origin] — The origin vector where the ray casts from.<br />
+		[page:Vector3 direction] — The normalized direction vector that gives direction to the ray.
+		</p>
+		<p>
+		Updates the ray with a new origin and direction.
+		</p>
+
+		<h3>[method:null setFromCamera]( [param:Vector2 coords], [param:Camera camera] )</h3>
+		<p>
+		[page:Vector2 coords] — 2D coordinates of the mouse, in normalized device coordinates (NDC)---X and Y components should be between -1 and 1.<br />
+		[page:Camera camera] — camera from which the ray should originate
+		</p>
+		<p>
+		Updates the ray with a new origin and direction.
+		</p>
+
+		<h3>[method:Array intersectObject]( [param:Object3D object], [param:Boolean recursive], [param:Array optionalTarget] )</h3>
+		<p>
+		[page:Object3D object] — The object to check for intersection with the ray.<br />
+		[page:Boolean recursive] — If true, it also checks all descendants. Otherwise it only checks intersecton with the object. Default is false.<br />
+		[page:Array optionalTarget] — (optional) target to set the result. Otherwise a new [page:Array] is instantiated. If set, you must clear this array prior to each call (i.e., array.length = 0;).
+		</p>
+		<p>
+		Checks all intersection between the ray and the object with or without the descendants. Intersections are returned sorted by distance, closest first. An array of intersections is returned...
+		</p>
+		<code>
+				[ { distance, point, face, faceIndex, object }, ... ]
+		</code>
+		<p>
+			[page:Float distance] – distance between the origin of the ray and the intersection<br />
+			[page:Vector3 point] – point of intersection, in world coordinates<br />
+			[page:Face3 face] – intersected face<br />
+			[page:Integer faceIndex] – index of the intersected face<br />
+			[page:Object3D object] – the intersected object<br />
+			[page:Vector2 uv] - U,V coordinates at point of intersection
+		</p>
+		<p>
+		*Raycaster* delegates to the [page:Object3D.raycast raycast] method of the passed object, when evaluating whether the ray intersects the object or not. This allows [page:Mesh meshes] to respond differently to ray casting than [page:Line lines] and [page:Points pointclouds].
+		</p>
+		<p>
+		*Note* that for meshes, faces must be pointed towards the origin of the [page:.ray ray] in order to be detected; intersections of the ray passing through the back of a face will not be detected. To raycast against both faces of an object, you'll want to set the [page:Mesh.material material]'s [page:Material.side side] property to *THREE.DoubleSide*.
+		</p>
+
+		<h3>[method:Array intersectObjects]( [param:Array objects], [param:Boolean recursive], [param:Array optionalTarget] )</h3>
+		<p>
+		[page:Array objects] — The objects to check for intersection with the ray.<br />
+		[page:Boolean recursive] — If true, it also checks all descendants of the objects. Otherwise it only checks intersecton with the objects. Default is false.<br />
+		[page:Array optionalTarget] — (optional) target to set the result. Otherwise a new [page:Array] is instantiated. If set, you must clear this array prior to each call (i.e., array.length = 0;).
+		</p>
+		<p>
+		Checks all intersection between the ray and the objects with or without the descendants. Intersections are returned sorted by distance, closest first. Intersections are of the same form as those returned by [page:.intersectObject].
+		</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 213 - 0
docs/api/zh/core/Uniform.html

@@ -0,0 +1,213 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">Uniforms are global [link:https://www.opengl.org/documentation/glsl/ GLSL] variables. They are passed to shader programs.
+		</p>
+
+		<h3>Example</h3>
+		<p>
+		When declaring a uniform of a [page:ShaderMaterial], it is declared by value or by object.
+		</p>
+		<code>
+		uniforms: {
+			time: { value: 1.0 },
+			resolution: new THREE.Uniform(new THREE.Vector2())
+		}
+		</code>
+
+		<h3>Uniform types</h3>
+
+		<p>
+		Each uniform must have a *value* property. The type of the value must correspond to the
+		type of the uniform variable in the GLSL code as specified for the primitive GLSL types
+		in the table below. Uniform structures and arrays are also supported. GLSL arrays of primitive
+		type must either be specified as an array of the corresponding THREE objects or as a flat
+		array containing the data of all the objects. In other words; GLSL primitives in arrays
+		must not be represented by arrays. This rule does not apply transitively.
+		An array of *vec2* arrays, each with a length of five vectors, must be an array of arrays,
+		of either five [page:Vector2] objects or ten *number*s.
+		</p>
+		<table>
+			<caption><a id="uniform-types">Uniform types</a></caption>
+			<thead>
+				<tr>
+					<th>GLSL type</th>
+					<th>JavaScript type</th>
+				</tr>
+			</thead>
+			<tbody>
+
+				<tr>
+					<td>int</td>
+					<td>[page:Number]</td>
+				</tr>
+				<tr>
+					<td>float</td>
+					<td>[page:Number]</td>
+				</tr>
+				<tr>
+					<td>bool</td>
+					<td>[page:Boolean]</td>
+				</tr>
+				<tr>
+					<td>bool</td>
+					<td>[page:Number]</td>
+				</tr>
+
+				<tr>
+					<td>vec2</td>
+					<td>[page:Vector2 THREE.Vector2]</td>
+				</tr>
+				<tr>
+					<td>vec2</td>
+					<td>[page:Float32Array Float32Array] (*)</td>
+				</tr>
+				<tr>
+					<td>vec2</td>
+					<td>[page:Array Array] (*)</td>
+				</tr>
+				<tr>
+					<td>vec3</td>
+					<td>[page:Vector3 THREE.Vector3]</td>
+				</tr>
+				<tr>
+					<td>vec3</td>
+					<td>[page:Color THREE.Color]</td>
+				</tr>
+				<tr>
+					<td>vec3</td>
+					<td>[page:Float32Array Float32Array] (*)</td>
+				</tr>
+				<tr>
+					<td>vec3</td>
+					<td>[page:Array Array] (*)</td>
+				</tr>
+				<tr>
+					<td>vec4</td>
+					<td>[page:Vector4 THREE.Vector4]</td>
+				</tr>
+				<tr>
+					<td>vec4</td>
+					<td>[page:Quaternion THREE.Quaternion]</td>
+				</tr>
+				<tr>
+					<td>vec4</td>
+					<td>[page:Float32Array Float32Array] (*)</td>
+				</tr>
+				<tr>
+					<td>vec4</td>
+					<td>[page:Array Array] (*)</td>
+				</tr>
+
+				<tr>
+					<td>mat2</td>
+					<td>[page:Float32Array Float32Array] (*)</td>
+				</tr>
+				<tr>
+					<td>mat2</td>
+					<td>[page:Array Array] (*)</td>
+				</tr>
+				<tr>
+					<td>mat3</td>
+					<td>[page:Matrix3 THREE.Matrix3]</td>
+				</tr>
+				<tr>
+					<td>mat3</td>
+					<td>[page:Float32Array Float32Array] (*)</td>
+				</tr>
+				<tr>
+					<td>mat3</td>
+					<td>[page:Array Array] (*)</td>
+				</tr>
+				<tr>
+					<td>mat4</td>
+					<td>[page:Matrix3 THREE.Matrix4]</td>
+				</tr>
+				<tr>
+					<td>mat4</td>
+					<td>[page:Float32Array Float32Array] (*)</td>
+				</tr>
+				<tr>
+					<td>mat4</td>
+					<td>[page:Array Array] (*)</td>
+				</tr>
+
+				<tr>
+					<td>ivec2, bvec2</td>
+					<td>[page:Float32Array Float32Array] (*)</td>
+				</tr>
+				<tr>
+					<td>ivec2, bvec2</td>
+					<td>[page:Array Array] (*)</td>
+				</tr>
+				<tr>
+					<td>ivec3, bvec3</td>
+					<td>[page:Int32Array Int32Array] (*)</td>
+				</tr>
+				<tr>
+					<td>ivec3, bvec3</td>
+					<td>[page:Array Array] (*)</td>
+				</tr>
+				<tr>
+					<td>ivec4, bvec4</td>
+					<td>[page:Int32Array Int32Array] (*)</td>
+				</tr>
+				<tr>
+					<td>ivec4, bvec4</td>
+					<td>[page:Array Array] (*)</td>
+				</tr>
+
+				<tr>
+					<td>sampler2D</td>
+					<td>[page:Texture THREE.Texture]</td>
+				</tr>
+				<tr>
+					<td>samplerCube</td>
+					<td>[page:CubeTexture THREE.CubeTexture]</td>
+				</tr>
+
+			</tbody>
+		</table>
+
+		<p>
+		(*) Same for an (innermost) array (dimension) of the same GLSL type, containing the components of all vectors or matrices in the array.
+		</p>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( [param:Object value] )</h3>
+		<p>
+		value -- An object containing the value to set up the uniform. It's type must be one of the Uniform Types described above.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object value]</h3>
+		<p>
+		Current value of the uniform.
+		</p>
+
+		<h2>Methods</h2>
+
+		<h3>[method:Uniform clone]()</h3>
+		<p>
+		Returns a clone of this uniform.<br />
+		If the uniform's value property is an [page:Object] with a clone() method, this is used, otherwise the value is copied by assigment.
+		Array values are shared between cloned [page:Uniform]s.<br /><br />
+		See [example:webgldeferred_animation WebGL deferred animation] for an example of this method in use.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 56 - 0
docs/api/zh/core/bufferAttributeTypes/BufferAttributeTypes.html

@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:BufferAttribute] &rarr;
+
+		<h1>BufferAttribute Types</h1>
+
+		<p class="desc">
+		There are nine types of [page:BufferAttribute] available in three.js. These correspond to the JavaScript
+		[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#Syntax Typed Arrays].
+		</p>
+
+		<code>
+		THREE.Float64BufferAttribute
+		THREE.Float32BufferAttribute
+		THREE.Uint32BufferAttribute
+		THREE.Int32BufferAttribute
+		THREE.Uint16BufferAttribute
+		THREE.Int16BufferAttribute
+		THREE.Uint8ClampedBufferAttribute
+		THREE.Uint8BufferAttribute
+		THREE.Int8BufferAttribute
+		</code>
+
+		<h2>Constructor</h2>
+
+		All of the above are called in the same way.
+		<h3>TypedBufferAttribute( [param:Array array], [param:Integer itemSize], [param:Boolean normalized] )</h3>
+		<p>
+			array -- this can be a typed or untyped (normal) array. It will be converted to the Type specified.<br /><br />
+
+			itemSize -- the number of values of the array that should be associated with a particular vertex.<br /><br />
+
+			normalized -- (optional) indicates how the underlying data in the buffer maps to the values in the GLSL code.
+		</p>
+
+		<h2>Properties</h2>
+
+		See the [page:BufferAttribute] page for inherited properties.
+
+		<h2>Methods</h2>
+
+		See the [page:BufferAttribute] page for inherited methods.
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/core/BufferAttribute.js src/core/BufferAttribute.js]
+	</body>
+</html>

+ 620 - 0
docs/api/zh/deprecated/DeprecatedList.html

@@ -0,0 +1,620 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>Deprecated API List</h1>
+
+		<p>
+			As three.js has a rapidly evolving interface, you may come across examples that
+			suggest the use of API elements that are no longer part of the core.<br /><br />
+
+			Below is a list of such elements, along with info regarding their replacements.
+		</p>
+
+
+
+
+
+
+
+
+
+
+		<h2>Audio</h2>
+
+		<h3>[page:Audio]</h3>
+		<p>Audio.load has been deprecated. Use [page:AudioLoader] instead.</p>
+
+		<h3>[page:AudioAnalyser]</h3>
+		<p>AudioAnalyser.getData() has been renamed to [page:AudioAnalyser.getFrequencyData]().</p>
+
+		<h3>[page:BinaryTextureLoader]</h3>
+		<p>BinaryTextureLoader has been renamed to [page:DataTextureLoader].</p>
+
+
+
+
+
+
+
+
+
+
+
+		<h2>Buffers</h2>
+
+		<h3>[page:BufferAttribute]</h3>
+		<p>BufferAttribute.length has been renamed to [page:BufferAttribute.count].</p>
+		<p>BufferAttribute.copyIndicesArray() has been removed.</p>
+
+
+		<h3>[page:DynamicBufferAttribute]</h3>
+		<p>DynamicBufferAttribute has been removed. Use [page:BufferAttribute.setDynamic]( true ) instead.</p>
+
+		<h3>[page:Int8Attribute]</h3>
+		<p>Int8Attribute has been removed. Use [page:BufferAttributeTypes Int8BufferAttribute] instead.</p>
+
+		<h3>[page:Uint8Attribute]</h3>
+		<p>Uint8Attribute has been removed. Use [page:BufferAttributeTypes Uint8BufferAttribute] instead.</p>
+
+		<h3>[page:Uint8ClampedAttribute]</h3>
+		<p>Uint8ClampedAttribute has been removed. Use [page:BufferAttributeTypes Uint8ClampedBufferAttribute] instead.</p>
+
+		<h3>[page:Int16Attribute]</h3>
+		<p>Int16Attribute has been removed. Use [page:BufferAttributeTypes Int16BufferAttribute] instead.</p>
+
+		<h3>[page:Uint16Attribute]</h3>
+		<p>Uint16Attribute has been removed. Use [page:BufferAttributeTypes Uint16BufferAttribute] instead.</p>
+
+		<h3>[page:Int32Attribute]</h3>
+		<p>Int32Attribute has been removed. Use [page:BufferAttributeTypes Int32BufferAttribute] instead.</p>
+
+		<h3>[page:Uint32Attribute]</h3>
+		<p>Uint32Attribute has been removed. Use [page:BufferAttributeTypes Uint32BufferAttribute] instead.</p>
+
+		<h3>[page:Float32Attribute]</h3>
+		<p>Float32Attribute has been removed. Use [page:BufferAttributeTypes Float32BufferAttribute] instead.</p>
+
+		<h3>[page:Float64Attribute]</h3>
+		<p>Float64Attribute has been removed. Use [page:BufferAttributeTypes Float64BufferAttribute] instead.</p>
+
+
+
+
+
+
+
+		<h2>Cameras</h2>
+
+		<h3>[page:PerspectiveCamera]</h3>
+		<p>
+		PerspectiveCamera.setLens() is deprecated. Use [page:PerspectiveCamera.setFocalLength]()
+		 and [page:PerspectiveCamera.filmGauge]() for a photographic setup.
+		</p>
+
+
+
+
+
+
+
+		<h2>Constants</h2>
+
+		<h3>[page:LineStrip]</h3>
+
+		<h3>[page:LinePieces]</h3>
+		<p>
+		LinePieces mode is no longer supported for [page:Line]s. Create a [page:LineSegments] instead.
+		</p>
+
+
+
+
+
+		<h2>Core</h2>
+
+		<h3>[page:EventDispatcher]</h3>
+		<p>EventDispatcher.apply has been removed. Inherit or Object.assign the prototype to mix-in instead.</p>
+
+		<h3>[page:Raycaster]</h3>
+		<p>Raycaster.params.PointCloud has been renamed to [page:Raycaster.params.Points].</p>
+
+
+		<h3>[page:Uniform]</h3>
+		<p>
+			Uniform.dynamic has been removed. Use object.onBeforeRender() instead.<br /><br />
+
+			Uniform.onUpdate has been removed. Use object.onBeforeRender() instead.
+		</p>
+
+
+
+
+
+
+		<h2>Extras</h2>
+
+		<h3>[page:ClosedSplineCurve3]</h3>
+		<p>ClosedSplineCurve3 has been deprecated. Use [page:CatmullRomCurve3] instead.</p>
+
+		<h3>[page:SplineCurve3]</h3>
+		<p>SplineCurve3 has been deprecated. Use [page:CatmullRomCurve3] instead.</p>
+
+
+
+
+
+
+
+		<h2>Geometry</h2>
+
+		<p>
+			Geometry.computeTangents() has been removed.<br /><br />
+
+			Geometry.computeLineDistances() has been removed. Use [page:Line.computeLineDistances] instead.<br /><br />
+		</p>
+
+		<h3>[page:BufferGeometry]</h3>
+		<p>
+			BufferGeometry.addIndex has been renamed to [page:BufferGeometry.setIndex].<br /><br />
+
+			BufferGeometry.addDrawCall is now [page:BufferGeometry.addGroup].<br /><br />
+
+			BufferGeometry.clearDrawCalls is now [page:BufferGeometry.clearGroups].<br /><br />
+
+			BufferGeometry.computeTangents has been removed.<br /><br />
+
+			BufferGeometry.computeOffsets has been removed.<br /><br />
+
+			BufferGeometry.drawcalls has been renamed to [page:BufferGeometry.groups].<br /><br />
+
+			BufferGeometry.offsets has been renamed to [page:BufferGeometry.groups].<br /><br />
+
+		</p>
+
+		<h3>[page:CubeGeometry]</h3>
+		<p>CubeGeometry has been renamed to [page:BoxGeometry].</p>
+
+		<h3>[page:Geometry]</h3>
+		<p>Geometry.computeTangents() has been removed.</p>
+
+		<h3>[page:GeometryUtils]</h3>
+		<p>
+			GeometryUtils.merge has been moved to [page:Geometry]. Use [page:Geometry.merge]( geometry2, matrix, materialIndexOffset ) instead.<br /><br />
+
+			GeometryUtils.center has been moved to [page:Geometry]. Use [page:Geometry.center]( ) instead.
+		</p>
+
+		<h3>[page:Plane]</h3>
+		<p>
+			Plane.isIntersectionLine() has been renamed to	[page:Plane.intersectsLine]().
+		</p>
+
+
+
+
+
+
+
+
+		<h2>Helpers</h2>
+
+		<h3>[page:BoundingBoxHelper]</h3>
+		<p>BoundingBoxHelper has been deprecated. Use [page:BoxHelper] instead.</p>
+
+		<h3>[page:EdgesHelper]</h3>
+		<p>EdgesHelper has been removed. Use [page:EdgesGeometry] instead.</p>
+
+		<h3>[page:GridHelper]</h3>
+		<p>GridHelper.setColors() has been deprecated, pass them in the constructor instead.</p>
+
+		<h3>[page:WireframeHelper WireframeHelper]</h3>
+		<p>WireframeHelper has been removed. Use [page:WireframeGeometry] instead.</p>
+
+
+
+
+		<h2>Lights</h2>
+
+		<h3>[page:Light]</h3>
+		<p>
+			Light.onlyShadow has been removed.<br /><br />
+
+			Light.shadowCameraLeft is now [page:Light.shadow.camera.left].<br /><br />
+
+			Light.shadowCameraRight is now [page:Light.shadow.camera.right].<br /><br />
+
+			Light.shadowCameraTop is now [page:Light.shadow.camera.top].<br /><br />
+
+			Light.shadowCameraBottom is now [page:Light.shadow.camera.bottom].<br /><br />
+
+			Light.shadowCameraNear is now [page:Light.shadow.camera.near].<br /><br />
+
+			Light.shadowCameraFar is now [page:Light.shadow.camera.far].<br /><br />
+
+			Light.shadowCameraVisible has been removed. Use [page:CameraHelper] ( light.shadow.camera ) instead.<br /><br />
+
+			Light.shadowMapWidth is now [page:Light.shadow.mapSize.width].<br /><br />
+
+			Light.shadowMapHeight is now [page:Light.shadow.mapSize.height].
+		</p>
+
+
+
+
+
+
+
+
+		<h2>Loaders</h2>
+
+		<h3>[page:XHRLoader]</h3>
+		<p>XHRLoader has been renamed to [page:FileLoader].</p>
+
+
+
+
+
+
+
+
+		<h2>Maths</h2>
+
+		<h3>[page:Box2]</h3>
+		<p>
+			Box2.center has been renamed to [page:Box2.getCenter]().<br /><br />
+
+			Box2.empty has been renamed to [page:Box2.isEmpty]().<br /><br />
+
+			Box2.isIntersectionBox has been renamed to [page:Box2.intersectsBox]().<br /><br />
+
+			Box2.size has been renamed to [page:Box2.getSize]().
+
+		</p>
+
+		<h3>[page:Box3]</h3>
+		<p>
+			Box3.center has been renamed to [page:Box3.getCenter]().<br /><br />
+
+			Box3.empty has been renamed to [page:Box3.isEmpty]().<br /><br />
+
+			Box3.isIntersectionBox has been renamed to [page:Box3.intersectsBox]().<br /><br />
+
+			Box3.isIntersectionSphere has been renamed to [page:Box3.intersectsSphere]().<br /><br />
+
+			Box3.size has been renamed to [page:Box3.getSize]().
+		</p>
+
+		<h3>[page:Face4]</h3>
+		<p>Face4 has been removed. Use [page:Face3] instead.</p>
+
+		<h3>[page:Line3]</h3>
+		<p>Line3.center has been renamed to [page:Line3.getCenter]().</p>
+
+		<h3>[page:Math]</h3>
+		<p>
+			Math.random16() has been deprecated. Use Math.random() instead.
+		</p>
+
+		<h3>[page:Matrix3]</h3>
+		<p>
+			Matrix3.flattenToArrayOffset is deprecated. Use [page:Matrix3.toArray]() instead.<br /><br />
+
+			Matrix3.multiplyVector3 has been removed. Use vector.applyMatrix3( matrix ) instead.<br /><br />
+
+			Matrix3.multiplyVector3Array has been renamed to [page:Matrix3.applyToVector3Array]( array ).<br /><br />
+
+			Matrix3.applyToBuffer has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.<br /><br />
+
+			Matrix3.applyToVector3Array has been removed.
+		<p>
+
+		<h3>[page:Matrix4]</h3>
+		<p>
+			Matrix4.flattenToArrayOffset() is deprecated. Use [page:Matrix4.toArray]() instead.<br /><br />
+
+			Matrix4.extractPosition() has been renamed to [page:Matrix4.copyPosition]( matrix ).<br /><br />
+
+			Matrix4.getPosition() has been removed. Use [page:Vector3.setFromMatrixPosition]( matrix ) instead.<br /><br />
+
+			Matrix4.setRotationFromQuaternion() has been renamed to [page:Matrix4.makeRotationFromQuaternion]( quaternion ).<br /><br />
+
+			Matrix4.multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.<br /><br />
+
+			Matrix4.multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.<br /><br />
+
+			Matrix4.multiplyVector3Array() has been renamed to [page:Matrix4.applyToVector3Array] ( array ).<br /><br />
+
+			Matrix4.rotateAxis() has been removed. Use [page:Matrix4.transformDirection]( matrix ) instead.<br /><br />
+
+			Matrix4.crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.<br /><br />
+
+			Matrix4.rotateX() has been removed.<br /><br />
+
+			Matrix4.rotateY() has been removed.<br /><br />
+
+			Matrix4.rotateZ() has been removed.<br /><br />
+
+			Matrix4.rotateByAxis() has been removed.<br /><br />
+
+			Matrix4.applyToBuffer() has been removed. Use matrix.applyToBufferAttribute() instead.<br /><br />
+
+			Matrix4.applyToVector3Array() has been removed.<br /><br />
+
+			Matrix4.makeFrustum() has been removed. Use [page:Matrix4.makePerspective]( left, right, top, bottom, near, far ) instead.
+		</p>
+
+
+		<h3>[page:Quaternion.multiplyVector3]</h3>
+		<p>Quaternion.multiplyVector3() has been removed. Use vector.applyQuaternion( quaternion ) instead.</p>
+
+		<h3>[page:Ray]</h3>
+		<p>
+			Ray.isIntersectionBox() has been renamed to [page:Ray.intersectsBox]().<br /><br />
+
+			Ray.isIntersectionPlane has been renamed to [page:Ray.intersectsPlane].<br /><br />
+
+			Ray.isIntersectionSphere has been renamed to [page:Ray.intersectsSphere].
+		</p>
+
+		<h3>[page:Triangle]</h3>
+		<p>
+			Triangle.area() has been renamed to [page:Triangle.getArea]().<br /><br />
+			Triangle.barycoordFromPoint() has been renamed to [page:Triangle.getBarycoord]().<br /><br />
+			Triangle.midpoint() has been renamed to [page:Triangle.getMidpoint]().<br /><br />
+			Triangle.normal() has been renamed to [page:Triangle.getNormal]().<br /><br />
+			Triangle.plane() has been renamed to [page:Triangle.getPlane]().
+		</p>
+
+		<h3>[page:Vector2]</h3>
+		<p>
+			Vector2.fromAttribute() has been renamed to [page:Vector2.fromBufferAttribute]().
+		</p>
+
+		<h3>[page:Vector3]</h3>
+		<p>
+			Vector3.setEulerFromRotationMatrix() has been removed. Use [page:Euler.setFromRotationMatrix]() instead.<br /><br />
+
+			Vector3.setEulerFromQuaternion() has been removed. Use [page:Euler.setFromQuaternion]() instead.<br /><br />
+
+			Vector3.getPositionFromMatrix() has been renamed to [page:Vector3.setFromMatrixPosition]().<br /><br />
+
+			Vector3.getScaleFromMatrix() has been renamed to [page:Vector3.setFromMatrixScale]().<br /><br />
+
+			Vector3.getColumnFromMatrix() has been renamed to [page:Vector3.setFromMatrixColumn]().<br /><br />
+
+			Vector3.applyProjection() has been removed. Use [page:Vector3.applyMatrix4]() instead.<br /><br />
+
+			Vector3.fromAttribute() has been renamed to [page:Vector3.fromBufferAttribute]().
+		</p>
+
+		<h3>[page:Vector4]</h3>
+		<p>
+			Vector4.fromAttribute() has been renamed to [page:Vector4.fromBufferAttribute]().
+		</p>
+
+		<h3>[page:Vertex]</h3>
+		<p>Vertex has been removed. Use [page:Vector3] instead.</p>
+
+		<h3>[page:Spline]</h3>
+		<p>Spline has been removed. Use [page:CatmullRomCurve3] instead.</p>
+
+
+
+
+
+
+
+
+
+
+
+
+		<h2>Materials</h2>
+
+		<h3>[page:Material]</h3>
+		<p>
+			Material.wrapAround has been removed.<br /><br />
+
+			Material.wrapRGB has been removed.
+
+		</p>
+
+		<h3>[page:MeshFaceMaterial]</h3>
+		<p>MeshFaceMaterial has been removed. Use an array of materials instead.</p>
+
+		<h3>[page:MultiMaterial]</h3>
+		<p>MultiMaterial has been removed. Use an array of materials instead.</p>
+
+		<h3>[page:MeshPhongMaterial]</h3>
+		<p>MeshPhongMaterial.metal has been removed. Use [page:MeshStandardMaterial] instead.</p>
+
+		<h3>[page:ParticleBasicMaterial]</h3>
+		<p>ParticleBasicMaterial has been renamed to [page:PointsMaterial].</p>
+
+		<h3>[page:ParticleSystemMaterial]</h3>
+		<p>ParticleBasicMaterial has been renamed to [page:PointsMaterial].</p>
+
+		<h3>[page:PointCloudMaterial]</h3>
+		<p>PointCloudMaterial has been renamed to [page:PointsMaterial].</p>
+
+		<h3>[page:ShaderMaterial.derivatives]</h3>
+		<p>ShaderMaterial.derivatives has been moved to [page:ShaderMaterial.extensions.derivatives].</p>
+
+
+
+
+
+
+
+
+		<h2>Objects</h2>
+
+		<h3>[page:LOD.objects]</h3>
+		<p>LOD.objects has been renamed to [page:LOD.levels].</p>
+
+		<h3>[page:Object3D]</h3>
+		<p>
+			Object3D.eulerOrder is now [page:Object3D.rotation.order].<br /><br />
+
+			Object3D.getChildByName() has been renamed to [page:Object3D.getObjectByName]().<br /><br />
+
+			Object3D.renderDepth has been removed. Use [page:Object3D.renderOrder] instead.<br /><br />
+
+			Object3D.translate() has been removed. Use [page:Object3D.translateOnAxis]( axis, distance ) instead.<br /><br />
+
+			Object3D.useQuaternion has been removed. The library now uses quaternions by default.
+		</p>
+
+		<h3>[page:LensFlare]</h3>
+		<p>
+			LensFlare has been moved to [link:https://github.com/mrdoob/three.js/blob/master/examples/js/objects/Lensflare.js /examples/js/objects/Lensflare.js].
+		</p>
+
+
+		<h3>[page:Particle]</h3>
+		<p>Particle has been renamed to [page:Sprite].</p>
+
+		<h3>[page:ParticleSystem]</h3>
+		<p>ParticleSystem has been renamed to [page:Points].</p>
+
+		<h3>[page:PointCloud]</h3>
+		<p>PointCloud has been renamed to [page:Points].</p>
+
+		<h3>[page:Shape]</h3>
+		<p>
+			Shape.extrude has been removed. Use [page:ExtrudeGeometry] instead.<br /><br />
+
+			Shape.makeGeometry has been removed. Use [page:ShapeGeometry] instead.
+		</p>
+
+
+
+
+
+
+
+
+		<h2>Renderer</h2>
+
+		<h3>[page:Projector]</h3>
+		<p>
+			CanvasRenderer has been moved to [link:https://github.com/mrdoob/three.js/blob/master/examples/js/renderers/CanvasRenderer.js /examples/js/renderers/CanvasRenderer.js].
+		</p>
+
+		<h3>[page:Projector]</h3>
+		<p>
+			Projector has been moved to
+			[link:https://github.com/mrdoob/three.js/blob/master/examples/js/renderers/Projector.js 	/examples/js/renderers/Projector.js].<br /><br />
+
+			Projector.projectVector() is now [page:Vector.project]().<br /><br />
+
+			Projector.unprojectVector() is now [page:Vector.unproject]().<br /><br />
+
+			Projector:.pickingRay() is now [page:Raycaster.setFromCamera]().
+		</p>
+
+		<h3>[page:WebGLProgram]</h3>
+		<p>
+			WebGLProgram.uniforms is now [page:WebGLProgram.getUniforms]().<br /><br />
+
+			WebGLProgram.attributes is now [page:WebGLProgram.getAttributes]().
+		</p>
+
+		<h3>[page:WebGLRenderer]</h3>
+		<p>
+			WebGLRenderer.supportsFloatTextures() is now [page:WebGLRenderer.extensions.get]( 'OES_texture_float' ).<br /><br />
+
+			WebGLRenderer.supportsHalfFloatTextures() is now [page:WebGLRenderer.extensions.get]( 'OES_texture_half_float' ).<br /><br />
+
+			WebGLRenderer.supportsStandardDerivatives() is now [page:WebGLRenderer.extensions.get]( 'OES_standard_derivatives' ).<br /><br />
+
+			WebGLRenderer.supportsCompressedTextureS3TC() is now [page:WebGLRenderer.extensions.get]( 'WEBGL_compressed_texture_s3tc' ).<br /><br />
+
+			WebGLRenderer.supportsCompressedTexturePVRTC() is now [page:WebGLRenderer.extensions.get]( 'WEBGL_compressed_texture_pvrtc' ).<br /><br />
+
+			WebGLRenderer.supportsBlendMinMax() is now [page:WebGLRenderer.extensions.get]( 'EXT_blend_minmax' ).<br /><br />
+
+			WebGLRenderer.supportsVertexTextures() is now [page:WebGLRenderer.capabilities.vertexTextures].<br /><br />
+
+			WebGLRenderer.supportsInstancedArrays() is now [page:WebGLRenderer.extensions.get]( 'ANGLE_instanced_arrays' ).<br /><br />
+
+			WebGLRenderer.enableScissorTest() is now [page:WebGLRenderer.setScissorTest]().<br /><br />
+
+			WebGLRenderer.initMaterial() has been removed.<br /><br />
+
+			WebGLRenderer.addPrePlugin() has been removed.<br /><br />
+
+			WebGLRenderer.addPostPlugin() has been removed.<br /><br />
+
+			WebGLRenderer.updateShadowMap() has been removed.<br /><br />
+
+			WebGLRenderer.setFaceCulling() has been removed.<br /><br />
+
+			WebGLRenderer.setTexture is deprecated, use [page:WebGLRenderer.setTexture2D]() instead.<br /><br />
+
+			WebGLRenderer.shadowMapEnabled is now [page:WebGLRenderer.shadowMap.enabled].<br /><br />
+
+			WebGLRenderer.shadowMapType is now [page:WebGLRenderer.shadowMap.type].<br /><br />
+
+			WebGLRenderer.shadowMapCullFace has been removed. Set [page:Material.shadowSide] instead.<br /><br />
+
+			WebGLRenderer.shadowMap.cullFace has been removed. Set [page:Material.shadowSide] instead.<br /><br />
+
+			WebGLRenderer.shadowMap.renderReverseSided has been removed. Set [page:Material.shadowSide] instead.<br /><br />
+
+			WebGLRenderer.shadowMap.renderSingleSided has been removed. Set [page:Material.shadowSide] instead.
+
+		</p>
+
+		<h3>[page:WebGLRenderTarget]</h3>
+		<p>
+			WebGLRenderTarget.wrapS is now [page:WebGLRenderTarget.texture.wrapS].<br /><br />
+
+			WebGLRenderTarget.wrapT is now [page:WebGLRenderTarget.texture.wrapT].<br /><br />
+
+			WebGLRenderTarget.magFilter is now [page:WebGLRenderTarget.texture.magFilter].<br /><br />
+
+			WebGLRenderTarget.minFilter is now [page:WebGLRenderTarget.texture.minFilter].<br /><br />
+
+			WebGLRenderTarget.anisotropy is now [page:WebGLRenderTarget.texture.anisotropy].<br /><br />
+
+			WebGLRenderTarget.offset is now [page:WebGLRenderTarget.texture.offset].<br /><br />
+
+			WebGLRenderTarget.repeat is now [page:WebGLRenderTarget.texture.repeat].<br /><br />
+
+			WebGLRenderTarget.format is now [page:WebGLRenderTarget.texture.format].<br /><br />
+
+			WebGLRenderTarget.type is now [page:WebGLRenderTarget.texture.type].<br /><br />
+
+			WebGLRenderTarget.generateMipmaps is now [page:WebGLRenderTarget.texture.generateMipmaps].
+		</p>
+
+
+		<h2>Textures</h2>
+
+		<h3>[page:ImageUtils]</h3>
+		<p>
+			ImageUtils.loadTexture has been deprecated. Use [page:TextureLoader] instead.<br /><br />
+
+			ImageUtils.loadTextureCube has been deprecated. Use [page:CubeTextureLoader] instead.<br /><br />
+
+			ImageUtils.loadCompressedTexture has been removed. Use [page:DDSLoader] instead.<br /><br />
+
+			ImageUtils.loadCompressedTextureCube has been removed. Use [page:DDSLoader] instead.
+		</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/Three.Legacy.js src/Three.Legacy.js]
+
+
+		</body>
+</html>

+ 31 - 0
docs/api/zh/extras/Earcut.html

@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+		An implementation of the earcut polygon triangulation algorithm. The code is a port of [link:https://github.com/mapbox/earcut mapbox/earcut].
+		</p>
+
+		<h2>Methods</h2>
+
+		<h3>[method:Array triangulate]( data, holeIndices, dim )</h3>
+		<p>
+		data -- A flat array of vertice coordinates.<br /><br />
+		holeIndices -- An array of hole indices if any.<br /><br />
+		dim -- The number of coordinates per vertice in the input array.<br /><br />
+
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 54 - 0
docs/api/zh/extras/ShapeUtils.html

@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+		A class containing utility functions for shapes.<br /><br />
+
+		Note that these are all linear functions so it is neccessary to calculate separately for
+		x, y (and z, w if present) components of a vector.
+		</p>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:Number area]( contour )</h3>
+		<p>
+		contour -- 2D polygon.<br /><br />
+
+		Calculate area of a ( 2D ) contour polygon.<br /><br />
+
+		</p>
+
+		<h3>[method:Boolean isClockwise]( pts )</h3>
+		<p>
+		pts -- points defining a 2D polygon<br /><br />
+
+		Note that this is a linear function so it is neccessary to calculate separately for
+		x, y  components of a polygon.<br /><br />
+
+		Used internally by [page:Path Path],
+		[page:ExtrudeGeometry ExtrudeGeometry] and [page:ShapeGeometry ShapeGeometry].
+		</p>
+
+		<h3>[method:Array triangulateShape]( contour, holes )</h3>
+		<p>
+		contour -- 2D polygon.<br />
+		holes -- array of holes<br /><br />
+
+		Used internally by [page:ExtrudeGeometry ExtrudeGeometry] and [page:ShapeGeometry ShapeGeometry] to calculate faces in shapes with holes.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 116 - 0
docs/api/zh/extras/core/Curve.html

@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+		An abstract base class for creating a [name] object that contains methods for interpolation.
+		For an array of [name]s see [page:CurvePath].
+		</p>
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]()</h3>
+		<p>
+		This constructor creates a new [name].
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Integer arcLengthDivisions]</h3>
+		<p>This value determines the amount of divisions when calculating the cumulative segment lengths of a curve via [page:.getLengths].
+			To ensure precision when using methods like [page:.getSpacedPoints], it is recommended to increase [page:.arcLengthDivisions] if the curve is very large. Default is 200.</p>
+
+		<h2>Methods</h2>
+
+		<h3>[method:Vector getPoint]( [param:Float t], [param:Vector optionalTarget] )</h3>
+		<p>
+			[page:Float t] - A position on the curve. Must be in the range [ 0, 1 ]. <br>
+			[page:Vector optionalTarget] — (optional) If specified, the result will be copied into this Vector,
+			otherwise a new Vector will be created. <br /><br />
+
+			Returns a vector for a given position on the curve.
+		</p>
+
+		<h3>[method:Vector getPointAt]( [param:Float u], [param:Vector optionalTarget] )</h3>
+		<p>
+			[page:Float u] - A position on the curve according to the arc length. Must be in the range [ 0, 1 ]. <br>
+			[page:Vector optionalTarget] — (optional) If specified, the result will be copied into this Vector,
+			otherwise a new Vector will be created. <br /><br />
+
+			Returns a vector for a given position on the curve according to the arc length.
+		</p>
+
+		<h3>[method:Array getPoints]( [param:Integer divisions] )</h3>
+		<p>
+			divisions -- number of pieces to divide the curve into. Default is *5*.<br /><br />
+
+			Returns a set of divisions + 1 points using getPoint( t ).
+		</p>
+
+		<h3>[method:Array getSpacedPoints]( [param:Integer divisions] )</h3>
+		<p>
+			divisions -- number of pieces to divide the curve into. Default is *5*.<br /><br />
+
+			Returns a set of divisions + 1 equi-spaced points using getPointAt( u ).
+		</p>
+
+		<h3>[method:Float getLength]()</h3>
+		<p>Get total curve arc length.</p>
+
+		<h3>[method:Array getLengths]( [param:Integer divisions] )</h3>
+		<p>Get list of cumulative segment lengths.</p>
+
+		<h3>[method:null updateArcLengths]()</h3>
+		<p>Update the cumlative segment distance cache.</p>
+
+		<h3>[method:Float getUtoTmapping]( [param:Float u], [param:Float distance] )</h3>
+		<p>
+			Given u in the range ( 0 .. 1 ), returns [page:Float t] also in the range ( 0 .. 1 ).
+			u and t can then be used to give you points which are equidistant from the ends of the curve,
+			using [page:.getPoint].
+		 </p>
+
+		<h3>[method:Vector getTangent]( [param:Float t] )</h3>
+		<p>
+			Returns a unit vector tangent at t. If the derived curve does not implement its
+			tangent derivation, two points a small delta apart will be used to find its gradient
+			which seems to give a reasonable approximation.
+		</p>
+
+		<h3>[method:Vector getTangentAt]( [param:Float u] )</h3>
+		<p>
+			Returns tangent at a point which is equidistant to the ends of the curve from the
+			point given in [page:.getTangent].
+		</p>
+
+		<h3>[method:Object computeFrenetFrames]( [param:Integer segments], [param:Boolean closed] )</h3>
+		<p>
+		Generates the Frenet Frames. Used in geometries like [page:TubeGeometry] or [page:ExtrudeGeometry].
+		</p>
+
+		<h3>[method:Curve clone]()</h3>
+		<p>Creates a clone of this instance.</p>
+
+		<h3>[method:Curve copy]( [param:Curve source] )</h3>
+		<p>Copies another [name] object to this instance.</p>
+
+		<h3>[method:Object toJSON]()</h3>
+		<p>Returns a JSON object representation of this instance.</p>
+
+		<h3>[method:Curve fromJSON]( [param:Object json] )</h3>
+		<p>Copies the data from the given JSON object to this instance.</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 60 - 0
docs/api/zh/extras/core/CurvePath.html

@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Curve] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+		An abstract base class extending [page:Curve]. A CurvePath is simply an array of connected curves,
+		but retains the api of a curve.
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]()</h3>
+		<p>
+		The constructor take no parameters.
+		</p>
+
+
+		<h2>Properties</h2>
+		<p>See the base [page:Curve] class for common properties.</p>
+
+		<h3>[property:array curves]</h3>
+		<p>The array of [page:Curve Curves].</p>
+
+		<h3>[property:boolean autoClose]</h3>
+		<p>Whether or not to automatically close the path.</p>
+
+
+
+
+
+		<h2>Methods</h2>
+		<p>See the base [page:Curve] class for common methods.</p>
+
+		<h3>[method:null add]( [param:Curve curve] )</h3>
+		<p>Add a curve to the [page:.curves] array.</p>
+
+		<h3>[method:null closePath]()</h3>
+		<p>Adds a [page:LineCurve lineCurve] to close the path.</p>
+
+		<h3>[method:Float getCurveLengths]()</h3>
+		<p>Adds together the lengths of the curves in the [page:.curves] array.</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 61 - 0
docs/api/zh/extras/core/Font.html

@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+		Create a set of [page:Shape Shapes] representing a font loaded in JSON format.<br /><br />
+
+		This is used internally by the [page:FontLoader].
+		</p>
+
+		<h2>Examples</h2>
+
+		<p>
+		[example:webgl_geometry_text_shapes geometry / text / shapes ]<br/>
+		[example:webgl_shaders_vector vector / text ]<br/>
+		</p>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( data )</h3>
+		<p>
+		data -- JSON data representing the font.<br /><br />
+
+		This constructor creates a new [name], which is an array of [page:Shape Shapes].
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:array data]</h3>
+		<p>The JSON data passed in the constructor.</p>
+
+		<h3>[property:Boolean isFont]</h3>
+		<p>
+			Used to check whether this or derived classes are fonts. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally by the renderer for optimisation.
+		</p>
+
+		<h2>Methods</h2>
+
+		<h3>[method:null generateShapes]( [param:String text], [param:Float size] )</h3>
+		<p>
+			[page:String text] -- string of text.<br />
+			[page:Float size] -- (optional) scale for the [page:Shape Shapes]. Default is *100*.<br />
+
+			Creates an array of [page:Shape Shapes] representing the text in the font.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 47 - 0
docs/api/zh/extras/core/Interpolations.html

@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<p class="desc">
+		TODO
+		</p>
+
+		<h2>Methods</h2>
+
+		<h3>[method:Float CatmullRom]( [param:Float t], [param:Float p0], [param:Float p1], [param:Float p2], [param:Float p3] )</h3>
+		<p>
+		t -- interpolation weight.<br />
+		p0, p1, p2, p3 -- the points defining the spline curve.<br /><br />
+
+		Used internally by [page:SplineCurve SplineCurve].
+		</p>
+
+		<h3>[method:Float QuadraticBezier]( [param:Float t], [param:Float p0], [param:Float p1], [param:Float p2] )</h3>
+		<p>
+		t -- interpolation weight.<br />
+		p0, p1, p2 -- the starting, control and end points defining the curve.<br /><br />
+
+		Used internally by [page:QuadraticBezierCurve3 QuadraticBezierCurve3], [page:QuadraticBezierCurve QuadraticBezierCurve] and [page:Font Font].
+		</p>
+
+		<h3>[method:Float CubicBezier]( [param:Float t], [param:Float p0], [param:Float p1], [param:Float p2], [param:Float p3] )</h3>
+		<p>
+		t -- interpolation weight.<br />
+		p0, p1, p2, p3 -- the starting, control(twice) and end points defining the curve.<br /><br />
+
+		Used internally by [page:CubicBezierCurve3 CubicBezierCurve3], [page:CubicBezierCurve CubicBezierCurve] and [page:Font Font].
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 145 - 0
docs/api/zh/extras/core/Path.html

@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:CurvePath] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+		A 2D path representation. The class provides methods for creating paths and contours of 2D shapes similar to the 2D Canvas API.
+		</p>
+
+		<h2>Example</h2>
+
+		<code>
+			var path = new THREE.Path();
+
+			path.lineTo( 0, 0.8 );
+			path.quadraticCurveTo( 0, 1, 0.2, 1 );
+			path.lineTo( 1, 1 );
+
+			var points = path.getPoints();
+
+			var geometry = new THREE.BufferGeometry().setFromPoints( points );
+			var material = new THREE.LineBasicMaterial( { color: 0xffffff } );
+
+			var line = new THREE.Line( geometry, material );
+			scene.add( line );
+		</code>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:Array points] )</h3>
+		<p>
+		points -- (optional) array of [page:Vector2 Vector2s].<br /><br />
+
+		Creates a Path from the points. The first point defines the offset, then successive points
+		are added to the [page:CurvePath.curves curves] array as [page:LineCurve LineCurves].<br /><br />
+
+		If no points are specified, an empty path is created and the [page:.currentPoint] is set to
+		the origin.
+		</p>
+
+
+		<h2>Properties</h2>
+		<p>See the base [page:CurvePath] class for common properties.</p>
+
+		<h3>[property:array currentPoint]</h3>
+		<p>The current offset of the path. Any new [page:Curve] added will start here.</p>
+
+
+		<h2>Methods</h2>
+		<p>See the base [page:CurvePath] class for common methods.</p>
+
+		<h3>[method:null absarc]( [param:Float x], [param:Float y], [param:Float radius], [param:Float startAngle], [param:Float endAngle], [param:Float clockwise] )</h3>
+		<p>
+			x, y -- The absolute center of the arc.<br />
+			radius -- The radius of the arc.<br />
+			startAngle -- The start angle in radians.<br />
+			endAngle -- The end angle in radians.<br />
+			clockwise -- Sweep the arc clockwise. Defaults to *false*.<br /><br />
+
+			Adds an absolutely positioned [page:EllipseCurve EllipseCurve] to the path.
+		</p>
+
+		<h3>[method:null absellipse]( [param:Float x], [param:Float y], [param:Float xRadius], [param:Float yRadius], [param:Float startAngle], [param:Float endAngle], [param:Float clockwise], [param:Float rotation] )</h3>
+		<p>
+			x, y -- The absolute center of the ellipse.<br />
+			xRadius -- The radius of the ellipse in the x axis.<br />
+			yRadius -- The radius of the ellipse in the y axis.<br />
+			startAngle -- The start angle in radians.<br />
+			endAngle -- The end angle in radians.<br />
+			clockwise -- Sweep the ellipse clockwise. Defaults to false.<br />
+			rotation -- The rotation angle of the ellipse in radians, counterclockwise from the positive X axis. Optional, defaults to 0.<br /><br />
+
+			Adds an absolutely positioned [page:EllipseCurve EllipseCurve] to the path.
+		</p>
+
+		<h3>[method:null arc]( [param:Float x], [param:Float y], [param:Float radius], [param:Float startAngle], [param:Float endAngle], [param:Float clockwise] )</h3>
+		<p>
+		x, y -- The center of the arc offset from the last call.<br />
+		radius -- The radius of the arc.<br />
+		startAngle -- The start angle in radians.<br />
+		endAngle -- The end angle in radians.<br />
+		clockwise -- Sweep the arc clockwise. Defaults to *false*.<br /><br />
+
+		Adds an [page:EllipseCurve EllipseCurve] to the path, positioned relative to [page:.currentPoint].
+		</p>
+
+
+		<h3>[method:null bezierCurveTo]( [param:Float cp1X], [param:Float cp1Y], [param:Float cp2X], [param:Float cp2Y], [param:Float x], [param:Float y] )</h3>
+		<p>This creates a bezier curve from [page:.currentPoint] with (cp1X, cp1Y) and (cp2X, cp2Y) as control points and updates [page:.currentPoint] to x and y.</p>
+
+		<h3>[method:null ellipse]( [param:Float x], [param:Float y], [param:Float xRadius], [param:Float yRadius], [param:Float startAngle], [param:Float endAngle], [param:Float clockwise], [param:Float rotation] )</h3>
+		<p>
+			x, y -- The center of the ellipse offset from the last call.<br />
+			xRadius -- The radius of the ellipse in the x axis.<br />
+			yRadius -- The radius of the ellipse in the y axis.<br />
+			startAngle -- The start angle in radians.<br />
+			endAngle -- The end angle in radians.<br />
+			clockwise -- Sweep the ellipse clockwise. Defaults to *false*.<br />
+			rotation -- The rotation angle of the ellipse in radians, counterclockwise from the positive X axis. Optional, defaults to *0*.<br /><br />
+
+			Adds an [page:EllipseCurve EllipseCurve] to the path, positioned relative to [page:.currentPoint].
+		</p>
+
+		<h3>[method:null lineTo]( [param:Float x], [param:Float y] )</h3>
+		<p>Connects a [page:LineCurve] from [page:.currentPoint] to x, y onto the path.</p>
+
+
+		<h3>[method:null moveTo]( [param:Float x], [param:Float y] )</h3>
+		<p>Move the [page:.currentPoint] to x, y.</p>
+
+
+		<h3>[method:null quadraticCurveTo]( [param:Float cpX], [param:Float cpY], [param:Float x], [param:Float y] )</h3>
+		<p>Creates a quadratic curve from [page:.currentPoint] with cpX and cpY as control point and updates [page:.currentPoint] to x and y.</p>
+
+		<h3>[method:null setFromPoints]( [param:Array vector2s] )</h3>
+		<p>
+			points --  array of [page:Vector2 Vector2s].<br /><br />
+
+			Points are added to the [page:CurvePath.curves curves]
+			array as [page:LineCurve LineCurves].
+		</p>
+
+		<h3>[method:null splineThru] ( [param:Array points] ) </h3>
+		<p>
+			points - An array of [page:Vector2 Vector2s]<br /><br />
+
+			Connects a new [page:SplineCurve] onto the path.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 101 - 0
docs/api/zh/extras/core/Shape.html

@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Path] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+		Defines an arbitrary 2d shape plane using paths with optional holes. It can be used with [page:ExtrudeGeometry],
+		[page:ShapeGeometry], to get points, or to get triangulated faces.
+		</p>
+
+		<code>
+		var heartShape = new THREE.Shape();
+
+		heartShape.moveTo( 25, 25 );
+		heartShape.bezierCurveTo( 25, 25, 20, 0, 0, 0 );
+		heartShape.bezierCurveTo( 30, 0, 30, 35,30,35 );
+		heartShape.bezierCurveTo( 30, 55, 10, 77, 25, 95 );
+		heartShape.bezierCurveTo( 60, 77, 80, 55, 80, 35 );
+		heartShape.bezierCurveTo( 80, 35, 80, 0, 50, 0 );
+		heartShape.bezierCurveTo( 35, 0, 25, 25, 25, 25 );
+
+		var extrudeSettings = { amount: 8, bevelEnabled: true, bevelSegments: 2, steps: 2, bevelSize: 1, bevelThickness: 1 };
+
+		var geometry = new THREE.ExtrudeGeometry( heartShape, extrudeSettings );
+
+		var mesh = new THREE.Mesh( geometry, new THREE.MeshPhongMaterial() );
+		</code>
+
+		<h2>Examples</h2>
+
+		<p>
+		[example:webgl_geometry_shapes geometry / shapes ]<br/>
+		[example:webgl_geometry_extrude_shapes geometry / extrude / shapes ]<br/>
+		[example:webgl_geometry_extrude_shapes2 geometry / extrude / shapes2 ]<br/>
+		</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:Array points] )</h3>
+		<p>
+		points -- (optional) array of [page:Vector2 Vector2s].<br /><br />
+
+		Creates a Shape from the points. The first point defines the offset, then successive points
+		are added to the [page:CurvePath.curves curves] array as [page:LineCurve LineCurves].<br /><br />
+
+		If no points are specified, an empty shape is created and the [page:.currentPoint] is set to
+		the origin.
+		</p>
+
+
+		<h2>Properties</h2>
+		<p>See the base [page:Path] class for common properties.</p>
+
+		<h3>[property:String uuid]</h3>
+		<p>
+		[link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] of this instance. This gets automatically assigned, so this shouldn't be edited.
+		</p>
+
+		<h3>[property:array holes]</h3>
+		<p>An array of [page:Path paths] that define the holes in the shape.</p>
+
+		<h2>Methods</h2>
+		<p>See the base [page:Path] class for common methods.</p>
+
+		<h3>[method:Array extractPoints]( [param:Integer divisions] )</h3>
+		<p>
+		divisions -- The fineness of the result.<br /><br />
+
+		Call [page:Curve.getPoints getPoints] on the shape and the [page:.holes] array, and return an object of the form:
+		<code>
+{
+	shape
+	holes
+}
+		</code>
+		where shape and holes are arrays of [page:Vector2 Vector2s].
+		</p>
+
+		<h3>[method:Array getPointsHoles]( [param:Integer divisions] )</h3>
+		<p>
+		divisions -- The fineness of the result.<br /><br />
+
+		Get an array of [page:Vector2 Vector2s] that represent the holes in the shape.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 91 - 0
docs/api/zh/extras/core/ShapePath.html

@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:CurvePath] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+		This class is used to convert a series of shapes to an array of [page:Path]s, for example an SVG shape to a
+		path (see the example below). It is used internally by [page:Font] to convert a font in JSON format to a
+		series of paths.
+		</p>
+
+		<h2>Example</h2>
+
+		[example:webgl_geometry_extrude_shapes2 geometry / extrude / shapes2]
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name](  )</h3>
+		<p>
+		Creates a new ShapePath. Unlike a [page:Path], no points are passed in as the ShapePath is designed to
+		be generated after creation.
+		</p>
+
+
+		<h2>Properties</h2>
+
+		<h3>[property:array subPaths]</h3>
+		<p>
+		Array of [page:Path]s.
+		</p>
+
+		<h3>[property:array currentPath]</h3>
+		<p>
+		The current [page:Path] that is being generated.
+		</p>
+
+		<h2>Methods</h2>
+
+		<h3>[method:null moveTo]( [param:Float x], [param:Float y] )</h3>
+		<p>
+		Starts a new [page:Path] and calls [page:Path.moveTo]( x, y ) on that [page:Path].
+		Also points [page:ShapePath.currentPath currentPath] to that [page:Path].
+		</p>
+
+		<h3>[method:null lineTo]( [param:Float x], [param:Float y] )</h3>
+		<p>This creates a line from the [page:ShapePath.currentPath currentPath]'s
+			offset to X and Y and updates the offset to X and Y.</p>
+
+		<h3>[method:null quadraticCurveTo]( [param:Float cpX], [param:Float cpY], [param:Float x], [param:Float y] )</h3>
+		<p>This creates a quadratic curve from the [page:ShapePath.currentPath currentPath]'s
+			offset to x and y with cpX and cpY as control point and updates the [page:ShapePath.currentPath currentPath]'s
+			offset to x and y.</p>
+
+		<h3>[method:null bezierCurveTo]( [param:Float cp1X], [param:Float cp1Y], [param:Float cp2X], [param:Float cp2Y], [param:Float x], [param:Float y] )</h3>
+		<p>This creates a bezier curve from the [page:ShapePath.currentPath currentPath]'s
+			 offset to x and y with cp1X, cp1Y and cp1X, cp1Y as control points and updates the
+			 [page:ShapePath.currentPath currentPath]'s offset to x and y.</p>
+
+		<h3>[method:null splineThru] ( [param:Array points] ) </h3>
+		<p>points - An array of [page:Vector2]s</p>
+		<p>Connects a new [page:SplineCurve] onto the [page:ShapePath.currentPath currentPath].</p>
+
+
+		<h3>[method:Array toShapes]( [param:Boolean isCCW], [param:Boolean noHoles] )</h3>
+		<p>
+		isCCW -- Changes how solids and holes are generated<br/>
+		noHoles -- Whether or not to generate holes
+		</p>
+		<p>
+		Converts the [page:ShapePath.subPaths subPaths] array into an array of Shapes. By default solid shapes are defined clockwise (CW) and holes are defined counterclockwise (CCW). If isCCW is set to true,
+		then those are flipped. If the parameter noHoles is set to true then all paths are set as solid shapes and isCCW is ignored.
+		<br/>
+
+		</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/extras/core/Path.js src/extras/core/Path.js]
+	</body>
+</html>

+ 32 - 0
docs/api/zh/extras/curves/ArcCurve.html

@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:EllipseCurve] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">Alias for [page:EllipseCurve]</p>
+
+		<h2>Properties</h2>
+		<p>See the [page:EllipseCurve] class for common properties.</p>
+
+		<h3>[property:Boolean isArcCurve]</h3>
+		<p>
+			Used to check whether this or derived classes are ArcCurves. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 81 - 0
docs/api/zh/extras/curves/CatmullRomCurve3.html

@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Curve] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">Create a smooth 3d spline curve from a series of points using the
+			[link:https://en.wikipedia.org/wiki/Centripetal_Catmull-Rom_spline Catmull-Rom] algorithm.</p>
+
+		<h2>Example</h2>
+
+<code>
+//Create a closed wavey loop
+var curve = new THREE.CatmullRomCurve3( [
+	new THREE.Vector3( -10, 0, 10 ),
+	new THREE.Vector3( -5, 5, 5 ),
+	new THREE.Vector3( 0, 0, 0 ),
+	new THREE.Vector3( 5, -5, 5 ),
+	new THREE.Vector3( 10, 0, 10 )
+] );
+
+var points = curve.getPoints( 50 );
+var geometry = new THREE.BufferGeometry().setFromPoints( points );
+
+var material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
+
+// Create the final object to add to the scene
+var curveObject = new THREE.Line( geometry, material );
+</code>
+
+		<h3>[example:webgl_geometry_extrude_splines geometry / extrude / splines]</h3>
+
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( [param:Array points], [param:Boolean closed], [param:String curveType], [param:Float tension] )</h3>
+		<p>
+			points – An array of [page:Vector3] points<br/>
+			closed – Whether the curve is closed. Default is *false*.<br/>
+			curveType – Type of the curve. Default is *centripetal*.<br/>
+			tension – Tension of the curve. Default is *0.5*.
+		</p>
+
+
+		<h2>Properties</h2>
+		<p>See the base [page:Curve] class for common properties.</p>
+
+		<h3>[property:Boolean isCatmullRomCurve3]</h3>
+		<p>
+			Used to check whether this or derived classes are CatmullRomCurve3s. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</p>
+
+		<h3>[property:Array points]</h3>
+		<p>The array of [page:Vector3] points that define the curve. It needs at least two entries.</p>
+
+		<h3>[property:Boolean closed]</h3>
+		<p>The curve will loop back onto itself when this is true.</p>
+
+		<h3>[property:String curveType]</h3>
+		<p>Possible values are *centripetal*, *chordal* and *catmullrom*.</p>
+
+		<h3>[property:float tension]</h3>
+		<p>When [page:.type] is *catmullrom*, defines catmullrom's tension.</p>
+
+
+		<h2>Methods</h2>
+		<p>See the base [page:Curve] class for common methods.</p>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 81 - 0
docs/api/zh/extras/curves/CubicBezierCurve.html

@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Curve] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			Create a smooth 2d
+			<a href="http://en.wikipedia.org/wiki/B%C3%A9zier_curve#mediaviewer/File:Bezier_curve.svg" target="_blank">cubic bezier curve</a>,
+			defined by a start point, endpoint and two control points.
+		</p>
+
+		<h2>Example</h2>
+
+<code>
+var curve = new THREE.CubicBezierCurve(
+	new THREE.Vector2( -10, 0 ),
+	new THREE.Vector2( -5, 15 ),
+	new THREE.Vector2( 20, 15 ),
+	new THREE.Vector2( 10, 0 )
+);
+
+var points = curve.getPoints( 50 );
+var geometry = new THREE.BufferGeometry().setFromPoints( points );
+
+var material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
+
+// Create the final object to add to the scene
+var curveObject = new THREE.Line( geometry, material );
+</code>
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name] ( [param:Vector2 v0], [param:Vector2 v1], [param:Vector2 v2], [param:Vector2 v3] )</h3>
+		<p>
+			[page:Vector2 v0] – The starting point.<br/>
+			[page:Vector2 v1] – The first control point.<br/>
+			[page:Vector2 v2] – The second control point.<br/>
+			[page:Vector2 v3] – The ending point.
+		</p>
+
+		<h2>Properties</h2>
+		<p>See the base [page:Curve] class for common properties.</p>
+
+		<h3>[property:Boolean isCubicBezierCurve]</h3>
+		<p>
+			Used to check whether this or derived classes are CubicBezierCurves. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</p>
+
+		<h3>[property:Vector2 v0]</h3>
+		<p>The starting point.</p>
+
+		<h3>[property:Vector2 v1]</h3>
+		<p>The first control point.</p>
+
+		<h3>[property:Vector2 v2]</h3>
+		<p>The second control point.</p>
+
+		<h3>[property:Vector2 v3]</h3>
+		<p>The ending point.</p>
+
+
+		<h2>Methods</h2>
+		<p>See the base [page:Curve] class for common Methods.</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 82 - 0
docs/api/zh/extras/curves/CubicBezierCurve3.html

@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Curve] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			Create a smooth 3d
+			<a href="http://en.wikipedia.org/wiki/B%C3%A9zier_curve#mediaviewer/File:Bezier_curve.svg" target="_blank">cubic bezier curve</a>,
+			defined by a start point, endpoint and two control points.
+		</p>
+
+		<h2>Example</h2>
+
+<code>
+var curve = new THREE.CubicBezierCurve3(
+	new THREE.Vector3( -10, 0, 0 ),
+	new THREE.Vector3( -5, 15, 0 ),
+	new THREE.Vector3( 20, 15, 0 ),
+	new THREE.Vector3( 10, 0, 0 )
+);
+
+var points = curve.getPoints( 50 );
+var geometry = new THREE.BufferGeometry().setFromPoints( points );
+
+var material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
+
+// Create the final object to add to the scene
+var curveObject = new THREE.Line( geometry, material );
+
+</code>
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:Vector3 v0], [param:Vector3 v1], [param:Vector3 v2], [param:Vector3 v3] )</h3>
+		<p>
+			[page:Vector3 v0] – The starting point.<br/>
+			[page:Vector3 v1] – The first control point.<br/>
+			[page:Vector3 v2] – The second control point.<br/>
+			[page:Vector3 v3] – The ending point.
+		</p>
+
+		<h2>Properties</h2>
+		<p>See the base [page:Curve] class for common properties.</p>
+
+		<h3>[property:Boolean isCubicBezierCurve3]</h3>
+		<p>
+			Used to check whether this or derived classes are CubicBezierCurve3s. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</p>
+
+		<h3>[property:Vector2 v0]</h3>
+		<p>The starting point.</p>
+
+		<h3>[property:Vector2 v1]</h3>
+		<p>The first control point.</p>
+
+		<h3>[property:Vector2 v2]</h3>
+		<p>The second control point.</p>
+
+		<h3>[property:Vector2 v3]</h3>
+		<p>The ending point.</p>
+
+
+		<h2>Methods</h2>
+		<p>See the base [page:Curve] class for common Methods.</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 105 - 0
docs/api/zh/extras/curves/EllipseCurve.html

@@ -0,0 +1,105 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Curve] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			Creates a 2d curve in the shape of an ellipse. Setting the
+			[page:Number xRadius] equal to the [page:Number yRadius] will result in a circle.
+		</p>
+
+		<h2>Example</h2>
+
+<code>
+var curve = new THREE.EllipseCurve(
+	0,  0,            // ax, aY
+	10, 10,           // xRadius, yRadius
+	0,  2 * Math.PI,  // aStartAngle, aEndAngle
+	false,            // aClockwise
+	0                 // aRotation
+);
+
+var points = curve.getPoints( 50 );
+var geometry = new THREE.BufferGeometry().setFromPoints( points );
+
+var material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
+
+// Create the final object to add to the scene
+var ellipse = new THREE.Line( geometry, material );
+</code>
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:Float aX], [param:Float aY], [param:Float xRadius], [param:Float yRadius], [param:Radians aStartAngle], [param:Radians aEndAngle], [param:Boolean aClockwise], [param:Radians aRotation] )</h3>
+		<p>
+			[page:Float aX] – The X center of the ellipse. Default is *0*.<br/>
+			[page:Float aY] – The Y center of the ellipse. Default is *0*.<br/>
+			[page:Float xRadius] – The radius of the ellipse in the x direction. Default is *1*.<br/>
+			[page:Float yRadius] – The radius of the ellipse in the y direction. Default is *1*.<br/>
+			[page:Radians aStartAngle] – The start angle of the curve in radians starting from the middle right side.  Default is *0*.<br/>
+			[page:Radians aEndAngle] – The end angle of the curve in radians starting from the middle right side. Default is *2 x Math.PI*.<br/>
+			[page:Boolean aClockwise] – Whether the ellipse is drawn clockwise. Default is *false*.<br/>
+			[page:Radians aRotation]  – The rotation angle of the ellipse in radians, counterclockwise from the positive X axis (optional). Default is *0*.<br/><br/>
+
+			<em>Note:</em> When going clockwise it's best to set the start angle to (Math.PI * 2) and then work towards lower numbers.
+		</p>
+
+		<h2>Properties</h2>
+		<p>See the base [page:Curve] class for common properties.</p>
+
+		<h3>[property:Boolean isEllipseCurve]</h3>
+		<p>
+			Used to check whether this or derived classes are EllipseCurves. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</p>
+
+		<h3>[property:Float aX]</h3>
+		<p>The X center of the ellipse.</p>
+
+		<h3>[property:Float aY]</h3>
+		<p>The Y center of the ellipse.</p>
+
+		<h3>[property:Radians xRadius]</h3>
+		<p>The radius of the ellipse in the x direction.</p>
+
+		<h3>[property:Radians yRadius]</h3>
+		<p>The radius of the ellipse in the y direction.</p>
+
+		<h3>[property:Float aStartAngle]</h3>
+		<p>The start angle of the curve in radians starting from the middle right side.</p>
+
+		<h3>[property:Float aEndAngle]</h3>
+		<p>The end angle of the curve in radians starting from the middle right side.</p>
+
+		<h3>[property:Boolean aClockwise]</h3>
+		<p>Whether the ellipse is drawn clockwise.</p>
+
+		<h3>[property:Float aRotation]</h3>
+		<p>The rotation angle of the ellipse in radians, counterclockwise from the positive X axis (optional). Default is *0*.</p>
+
+		<h3>[property:Boolean isEllipseCurve]</h3>
+		<p>
+			Used to check whether this or derived classes are ellipses. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</p>
+
+		<h2>Methods</h2>
+		<p>See the base [page:Curve] class for common methods.</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 51 - 0
docs/api/zh/extras/curves/LineCurve.html

@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Curve] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">A curve representing a 2d line segment.</p>
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:Vector2 v1], [param:Vector2 v2] )</h3>
+		<p>
+			[page:Vector2 v1] – The start point.<br/>
+			[page:Vector2 v2] - The end point.
+		</p>
+
+
+		<h2>Properties</h2>
+		<p>See the base [page:Curve] class for common properties.</p>
+
+		<h3>[property:Boolean isLineCurve]</h3>
+		<p>
+			Used to check whether this or derived classes are LineCurves. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</p>
+
+		<h3>[property:Vector2 v1]</h3>
+		<p>The start point.</p>
+
+		<h3>[property:Vector2 v2]</h3>
+		<p>The end point</p>
+
+		<h2>Methods</h2>
+		<p>See the base [page:Curve] class for common methods.</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 50 - 0
docs/api/zh/extras/curves/LineCurve3.html

@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Curve] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">A curve representing a 3d line segment.</p>
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:Vector3 v1], [param:Vector3 v2] )</h3>
+		<p>
+			[page:Vector3 v1] – The start point.<br/>
+			[page:Vector3 v2] - The end point.
+		</p>
+
+
+		<h2>Properties</h2>
+		<p>See the base [page:Curve] class for common properties.</p>
+
+		<h3>[property:Boolean isLineCurve3]</h3>
+		<p>
+			Used to check whether this or derived classes are LineCurve3s. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</p>
+
+		<h3>[property:Vector3 v1]</h3>
+		<p>The start point.</p>
+
+		<h3>[property:Vector3 v2]</h3>
+		<p>The end point.</p>
+
+		<h2>Methods</h2>
+		<p>See the base [page:Curve] class for common methods.</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 77 - 0
docs/api/zh/extras/curves/QuadraticBezierCurve.html

@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Curve] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			Create a smooth 2d
+			<a href="http://en.wikipedia.org/wiki/B%C3%A9zier_curve#mediaviewer/File:B%C3%A9zier_2_big.gif" target="_blank">quadratic bezier curve</a>,
+			defined by a startpoint, endpoint and a single control point.
+		</p>
+
+		<h2>Example</h2>
+
+<code>
+var curve = new THREE.QuadraticBezierCurve(
+	new THREE.Vector2( -10, 0 ),
+	new THREE.Vector2( 20, 15 ),
+	new THREE.Vector2( 10, 0 )
+);
+
+var points = curve.getPoints( 50 );
+var geometry = new THREE.BufferGeometry().setFromPoints( points );
+
+var material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
+
+//Create the final object to add to the scene
+var curveObject = new THREE.Line( geometry, material );
+</code>
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:Vector2 v0], [param:Vector2 v1], [param:Vector2 v2] )</h3>
+		<p>
+			[page:Vector2 v0] – The startpoint.<br/>
+			[page:Vector2 v1] – The control point.<br/>
+			[page:Vector2 v2] – The endpoint.
+		</p>
+
+
+		<h2>Properties</h2>
+		<p>See the base [page:Curve] class for common properties.</p>
+
+		<h3>[property:Boolean isQuadraticBezierCurve]</h3>
+		<p>
+			Used to check whether this or derived classes are QuadraticBezierCurves. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</p>
+
+
+		<h3>[property:Vector2 v0]</h3>
+		<p>The startpoint.</p>
+
+		<h3>[property:Vector2 v1]</h3>
+		<p>The control point.</p>
+
+		<h3>[property:Vector2 v2]</h3>
+		<p>The endpoint.</p>
+
+		<h2>Methods</h2>
+		<p>See the base [page:Curve] class for common methods.</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 77 - 0
docs/api/zh/extras/curves/QuadraticBezierCurve3.html

@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Curve] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			Create a smooth 3d
+			<a href="http://en.wikipedia.org/wiki/B%C3%A9zier_curve#mediaviewer/File:B%C3%A9zier_2_big.gif" target="_blank">quadratic bezier curve</a>,
+			defined by a startpoint, endpoint and a single control point.
+		</p>
+
+		<h2>Example</h2>
+
+<code>
+var curve = new THREE.QuadraticBezierCurve3(
+	new THREE.Vector3( -10, 0, 0 ),
+	new THREE.Vector3( 20, 15, 0 ),
+	new THREE.Vector3( 10, 0, 0 )
+);
+
+var points = curve.getPoints( 50 );
+var geometry = new THREE.BufferGeometry().setFromPoints( points );
+
+var material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
+
+// Create the final object to add to the scene
+var curveObject = new THREE.Line( geometry, material );
+</code>
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:Vector3 v0], [param:Vector3 v1], [param:Vector3 v2] )</h3>
+		<p>
+			[page:Vector3 v0] – The starting point<br/>
+			[page:Vector3 v1] – The middle control point<br/>
+			[page:Vector3 v2] – The ending point<br/>
+		</p>
+
+
+
+		<h2>Properties</h2>
+		<p>See the base [page:Curve] class for common properties.</p>
+
+		<h3>[property:Boolean isQuadraticBezierCurve3]</h3>
+		<p>
+			Used to check whether this or derived classes are QuadraticBezierCurve3s. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</p>
+
+		<h3>[property:Vector3 v0]</h3>
+		<p>The startpoint.</p>
+
+		<h3>[property:Vector3 v1]</h3>
+		<p>The control point.</p>
+
+		<h3>[property:Vector3 v2]</h3>
+		<p>The endpoint.</p>
+
+		<h2>Methods</h2>
+		<p>See the base [page:Curve] class for common methods.</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 72 - 0
docs/api/zh/extras/curves/SplineCurve.html

@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Curve] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+		Create a smooth 2d spline curve from a series of points. Internally this uses
+		[page:Interpolations.CatmullRom] to create the curve.
+		</p>
+
+		<h2>Example</h2>
+
+<code>
+// Create a sine-like wave
+var curve = new THREE.SplineCurve( [
+	new THREE.Vector2( -10, 0 ),
+	new THREE.Vector2( -5, 5 ),
+	new THREE.Vector2( 0, 0 ),
+	new THREE.Vector2( 5, -5 ),
+	new THREE.Vector2( 10, 0 )
+] );
+
+var points = curve.getPoints( 50 );
+var geometry = new THREE.BufferGeometry().setFromPoints( points );
+
+var material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
+
+// Create the final object to add to the scene
+var splineObject = new THREE.Line( geometry, material );
+</code>
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [param:Array points] )</h3>
+		<p>points – An array of [page:Vector2] points that define the curve.</p>
+
+
+		<h2>Properties</h2>
+		<p>See the base [page:Curve] class for common properties.</p>
+
+		<h3>[property:Boolean isSplineCurve]</h3>
+		<p>
+			Used to check whether this or derived classes are SplineCurves. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</p>
+
+		<h3>[property:Array points]</h3>
+		<p>The array of [page:Vector2] points that define the curve.</p>
+
+
+
+		<h2>Methods</h2>
+		<p>See the base [page:Curve] class for common methods.</p>
+
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 42 - 0
docs/api/zh/extras/objects/ImmediateRenderObject.html

@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Object3D] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">base class for immediate rendering objects.</p>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]()</h3>
+		<p>
+		This creates a new [name].
+		</p>
+
+
+		<h2>Methods</h2>
+
+
+		<h3>[method:null render]([param:Function renderCallback])</h3>
+		<p>
+		renderCallback -- A function to render the generated object.
+		</p>
+		<p>
+		This function needs to be overridden to start the creation of the object and should call renderCallback when finished.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 75 - 0
docs/api/zh/geometries/BoxBufferGeometry.html

@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:BufferGeometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">This is the [page:BufferGeometry] port of [page:BoxGeometry].</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#BoxBufferGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+		<code>var geometry = new THREE.BoxBufferGeometry( 1, 1, 1 );
+		var material = new THREE.MeshBasicMaterial( {color: 0x00ff00} );
+		var cube = new THREE.Mesh( geometry, material );
+		scene.add( cube );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float width], [param:Float height], [param:Float depth], [param:Integer widthSegments], [param:Integer heightSegments], [param:Integer depthSegments])</h3>
+		<p>
+		width — Width of the sides on the X axis. Default is 1.<br />
+		height — Height of the sides on the Y axis. Default is 1.<br />
+		depth — Depth of the sides on the Z axis. Default is 1.<br />
+		widthSegments — Optional. Number of segmented faces along the width of the sides. Default is 1.<br />
+		heightSegments — Optional. Number of segmented faces along the height of the sides. Default is 1.<br />
+		depthSegments — Optional. Number of segmented faces along the depth of the sides. Default is 1.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+ 		<p>
+			Using the above example code above as our basis:
+			<code>
+		geometry.parameters; // outputs an object {width: 1, height: 1, depth: 1, widthSegments: undefined, heightSegments: undefined}
+		cube.geometry.parameters; // as above
+		cube.geometry.parameters.width; // === 1
+		cube.geometry.parameters.widthSegments // === undefined.
+			</code>
+ 		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/geometries/BoxGeometry.js src/geometries/BoxGeometry.js]
+	</body>
+</html>

+ 75 - 0
docs/api/zh/geometries/BoxGeometry.html

@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Geometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">BoxGeometry is the quadrilateral primitive geometry class. It is typically used for creating a cube or irregular quadrilateral of the dimensions provided with the 'width', 'height', and 'depth' constructor arguments.</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#BoxGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+		<code>var geometry = new THREE.BoxGeometry( 1, 1, 1 );
+		var material = new THREE.MeshBasicMaterial( {color: 0x00ff00} );
+		var cube = new THREE.Mesh( geometry, material );
+		scene.add( cube );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float width], [param:Float height], [param:Float depth], [param:Integer widthSegments], [param:Integer heightSegments], [param:Integer depthSegments])</h3>
+		<p>
+		width — Width of the sides on the X axis. Default is 1.<br />
+		height — Height of the sides on the Y axis. Default is 1.<br />
+		depth — Depth of the sides on the Z axis. Default is 1.<br />
+		widthSegments — Optional. Number of segmented faces along the width of the sides. Default is 1.<br />
+		heightSegments — Optional. Number of segmented faces along the height of the sides. Default is 1.<br />
+		depthSegments — Optional. Number of segmented faces along the depth of the sides. Default is 1.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+ 		<p>
+			Using the above example code above as our basis:
+			<code>
+				geometry.parameters; // outputs an object {width: 1, height: 1, depth: 1, widthSegments: undefined, heightSegments: undefined}
+				cube.geometry.parameters; // as above
+				cube.geometry.parameters.width; // === 1
+				cube.geometry.parameters.widthSegments // === undefined.
+			</code>
+ 		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 65 - 0
docs/api/zh/geometries/CircleBufferGeometry.html

@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:BufferGeometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">This is the [page:BufferGeometry] port of [page:CircleGeometry].</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#CircleBufferGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+		<code>
+		var geometry = new THREE.CircleBufferGeometry( 5, 32 );
+		var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
+		var circle = new THREE.Mesh( geometry, material );
+		scene.add( circle );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float radius], [param:Integer segments], [param:Float thetaStart], [param:Float thetaLength])</h3>
+		<p>
+		radius — Radius of the circle, default = 1.<br />
+		segments — Number of segments (triangles), minimum = 3, default = 8.<br />
+		thetaStart — Start angle for first segment, default = 0 (three o'clock position).<br />
+		thetaLength — The central angle, often called theta, of the circular sector. The default is 2*Pi, which makes for a complete circle.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/geometries/CircleGeometry.js src/geometries/CircleGeometry.js]
+	</body>
+</html>

+ 66 - 0
docs/api/zh/geometries/CircleGeometry.html

@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Geometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">CircleGeometry is a simple shape of Euclidean geometry.  It is contructed from a number of triangular segments that are oriented around a central point and extend as far out as a given radius.  It is built counter-clockwise from a start angle and a given central angle.  It can also be used to create regular polygons, where the number of segments determines the number of sides.
+		</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#CircleGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+		<code>
+		var geometry = new THREE.CircleGeometry( 5, 32 );
+		var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
+		var circle = new THREE.Mesh( geometry, material );
+		scene.add( circle );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float radius], [param:Integer segments], [param:Float thetaStart], [param:Float thetaLength])</h3>
+		<p>
+		radius — Radius of the circle, default = 1.<br />
+		segments — Number of segments (triangles), minimum = 3, default = 8.<br />
+		thetaStart — Start angle for first segment, default = 0 (three o'clock position).<br />
+		thetaLength — The central angle, often called theta, of the circular sector. The default is 2*Pi, which makes for a complete circle.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 67 - 0
docs/api/zh/geometries/ConeBufferGeometry.html

@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:CylinderBufferGeometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">This is the [page:BufferGeometry] port of [page:ConeGeometry].</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#ConeBufferGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+		<code>var geometry = new THREE.ConeBufferGeometry( 5, 20, 32 );
+		var material = new THREE.MeshBasicMaterial( {color: 0xffff00} );
+		var cone = new THREE.Mesh( geometry, material );
+		scene.add( cone );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float radius], [param:Float height], [param:Integer radialSegments], [param:Integer heightSegments], [param:Boolean openEnded], [param:Float thetaStart], [param:Float thetaLength])</h3>
+		<p>
+		radius — Radius of the cone base. Default is 1.<br />
+		height — Height of the cone. Default is 1.<br />
+		radialSegments — Number of segmented faces around the circumference of the cone. Default is 8<br />
+		heightSegments — Number of rows of faces along the height of the cone. Default is 1.<br />
+		openEnded — A Boolean indicating whether the base of the cone is open or capped. Default is false, meaning capped.<br />
+		thetaStart — Start angle for first segment, default = 0 (three o'clock position).<br />
+		thetaLength — The central angle, often called theta, of the circular sector. The default is 2*Pi, which makes for a complete cone.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/geometries/ConeGeometry.js src/geometries/ConeGeometry.js]
+	</body>
+</html>

+ 67 - 0
docs/api/zh/geometries/ConeGeometry.html

@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:CylinderGeometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">A class for generating cone geometries</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#ConeGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+		<code>var geometry = new THREE.ConeGeometry( 5, 20, 32 );
+		var material = new THREE.MeshBasicMaterial( {color: 0xffff00} );
+		var cone = new THREE.Mesh( geometry, material );
+		scene.add( cone );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float radius], [param:Float height], [param:Integer radialSegments], [param:Integer heightSegments], [param:Boolean openEnded], [param:Float thetaStart], [param:Float thetaLength])</h3>
+		<p>
+		radius — Radius of the cone at the base. Default is 1.<br />
+		height — Height of the cone. Default is 1.<br />
+		radialSegments — Number of segmented faces around the circumference of the cone. Default is 8<br />
+		heightSegments — Number of rows of faces along the height of the cone. Default is 1.<br />
+		openEnded — A Boolean indicating whether the base of the cone is open or capped. Default is false, meaning capped.<br />
+		thetaStart — Start angle for first segment, default = 0 (three o'clock position).<br />
+		thetaLength — The central angle, often called theta, of the circular sector. The default is 2*Pi, which makes for a complete cone.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 68 - 0
docs/api/zh/geometries/CylinderBufferGeometry.html

@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:BufferGeometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">This is the [page:BufferGeometry] port of [page:CylinderGeometry].</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#CylinderBufferGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+		<code>var geometry = new THREE.CylinderBufferGeometry( 5, 5, 20, 32 );
+		var material = new THREE.MeshBasicMaterial( {color: 0xffff00} );
+		var cylinder = new THREE.Mesh( geometry, material );
+		scene.add( cylinder );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float radiusTop], [param:Float radiusBottom], [param:Float height], [param:Integer radialSegments], [param:Integer heightSegments], [param:Boolean openEnded], [param:Float thetaStart], [param:Float thetaLength])</h3>
+		<p>
+		radiusTop — Radius of the cylinder at the top. Default is 1.<br />
+		radiusBottom — Radius of the cylinder at the bottom. Default is 1.<br />
+		height — Height of the cylinder. Default is 1.<br />
+		radialSegments — Number of segmented faces around the circumference of the cylinder. Default is 8<br />
+		heightSegments — Number of rows of faces along the height of the cylinder. Default is 1.<br />
+		openEnded — A Boolean indicating whether the ends of the cylinder are open or capped. Default is false, meaning capped.<br />
+		thetaStart — Start angle for first segment, default = 0 (three o'clock position).<br />
+		thetaLength — The central angle, often called theta, of the circular sector. The default is 2*Pi, which makes for a complete cylinder.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/geometries/CylinderGeometry.js src/geometries/CylinderGeometry.js]
+	</body>
+</html>

+ 68 - 0
docs/api/zh/geometries/CylinderGeometry.html

@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Geometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">A class for generating cylinder geometries</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#CylinderGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+		<code>var geometry = new THREE.CylinderGeometry( 5, 5, 20, 32 );
+		var material = new THREE.MeshBasicMaterial( {color: 0xffff00} );
+		var cylinder = new THREE.Mesh( geometry, material );
+		scene.add( cylinder );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float radiusTop], [param:Float radiusBottom], [param:Float height], [param:Integer radialSegments], [param:Integer heightSegments], [param:Boolean openEnded], [param:Float thetaStart], [param:Float thetaLength])</h3>
+		<p>
+		radiusTop — Radius of the cylinder at the top. Default is 1.<br />
+		radiusBottom — Radius of the cylinder at the bottom. Default is 1.<br />
+		height — Height of the cylinder. Default is 1.<br />
+		radialSegments — Number of segmented faces around the circumference of the cylinder. Default is 8<br />
+		heightSegments — Number of rows of faces along the height of the cylinder. Default is 1.<br />
+		openEnded — A Boolean indicating whether the ends of the cylinder are open or capped. Default is false, meaning capped.<br />
+		thetaStart — Start angle for first segment, default = 0 (three o'clock position).<br />
+		thetaLength — The central angle, often called theta, of the circular sector. The default is 2*Pi, which makes for a complete cylinder.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 54 - 0
docs/api/zh/geometries/DodecahedronBufferGeometry.html

@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:PolyhedronBufferGeometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">A class for generating a dodecahedron geometries.</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#DodecahedronBufferGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float radius], [param:Integer detail])</h3>
+		<p>
+		radius — Radius of the dodecahedron. Default is 1.<br />
+		detail — Default is 0. Setting this to a value greater than 0 adds vertices making it no longer a dodecahedron.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/geometries/DodecahedronGeometry.js src/geometries/DodecahedronGeometry.js]
+	</body>
+</html>

+ 54 - 0
docs/api/zh/geometries/DodecahedronGeometry.html

@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Geometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">A class for generating a dodecahedron geometries.</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#DodecahedronGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float radius], [param:Integer detail])</h3>
+		<p>
+		radius — Radius of the dodecahedron. Default is 1.<br />
+		detail — Default is 0. Setting this to a value greater than 0 adds vertices making it no longer a dodecahedron.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 47 - 0
docs/api/zh/geometries/EdgesGeometry.html

@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:BufferGeometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">This can be used as a helper object to view the edges of a [page:Geometry Geometry] object.</p>
+
+		<h2>Example</h2>
+
+		[example:webgl_helpers helpers]
+
+		<code>
+var geometry = new THREE.BoxBufferGeometry( 100, 100, 100 );
+var edges = new THREE.EdgesGeometry( geometry );
+var line = new THREE.LineSegments( edges, new THREE.LineBasicMaterial( { color: 0xffffff } ) );
+scene.add( line );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( [param:Geometry geometry], [param:Integer thresholdAngle] )</h3>
+		<p>
+		geometry — Any geometry object.<br />
+		thresholdAngle — An edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 106 - 0
docs/api/zh/geometries/ExtrudeBufferGeometry.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:BufferGeometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">Creates extruded BufferGeometry from a path shape.</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#ExtrudeBufferGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+
+		<code>
+		var length = 12, width = 8;
+
+		var shape = new THREE.Shape();
+		shape.moveTo( 0,0 );
+		shape.lineTo( 0, width );
+		shape.lineTo( length, width );
+		shape.lineTo( length, 0 );
+		shape.lineTo( 0, 0 );
+
+		var extrudeSettings = {
+			steps: 2,
+			depth: 16,
+			bevelEnabled: true,
+			bevelThickness: 1,
+			bevelSize: 1,
+			bevelSegments: 1
+		};
+
+		var geometry = new THREE.ExtrudeBufferGeometry( shape, extrudeSettings );
+		var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
+		var mesh = new THREE.Mesh( geometry, material ) ;
+		scene.add( mesh );
+		</code>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]([param:Array shapes], [param:Object options])</h3>
+		<p>
+		shapes — Shape or an array of shapes. <br />
+		options — Object that can contain the following parameters.
+
+			<ul>
+				<li>curveSegments — int. Number of points on the curves. Default is 12.</li>
+				<li>steps — int. Number of points used for subdividing segments along the depth of the extruded spline. Default is 1.</li>
+				<li>depth — float. Depth to extrude the shape. Default is 100.</li>
+				<li>bevelEnabled — bool. Apply beveling to the shape. Default is true.</li>
+				<li>bevelThickness — float. How deep into the original shape the bevel goes. Default is 6.</li>
+				<li>bevelSize — float. Distance from the shape outline that the bevel extends. Default is bevelThickness - 2.</li>
+				<li>bevelSegments — int. Number of bevel layers. Default is 3.</li>
+				<li>extrudePath — THREE.CurvePath. A 3D spline path along which the shape should be extruded.</li>
+				<li>UVGenerator —  Object. object that provides UV generator functions</li>
+			</ul>
+
+		</p>
+		<p>
+			This object extrudes a 2D shape to a 3D geometry.
+		</p>
+
+		<p>
+			When creating a Mesh with this geometry, if you'd like to have a separate material used for its face
+			and its extruded sides, you can use an array of materials. The first material will be
+			applied to the face; the second material will be applied to the sides.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/geometries/ExtrudeGeometry.js src/geometries/ExtrudeGeometry.js]
+	</body>
+</html>

+ 106 - 0
docs/api/zh/geometries/ExtrudeGeometry.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Geometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">Creates extruded geometry from a path shape.</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#ExtrudeGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+
+		<code>
+		var length = 12, width = 8;
+
+		var shape = new THREE.Shape();
+		shape.moveTo( 0,0 );
+		shape.lineTo( 0, width );
+		shape.lineTo( length, width );
+		shape.lineTo( length, 0 );
+		shape.lineTo( 0, 0 );
+
+		var extrudeSettings = {
+			steps: 2,
+			depth: 16,
+			bevelEnabled: true,
+			bevelThickness: 1,
+			bevelSize: 1,
+			bevelSegments: 1
+		};
+
+		var geometry = new THREE.ExtrudeGeometry( shape, extrudeSettings );
+		var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
+		var mesh = new THREE.Mesh( geometry, material ) ;
+		scene.add( mesh );
+		</code>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]([param:Array shapes], [param:Object options])</h3>
+		<p>
+		shapes — Shape or an array of shapes. <br />
+		options — Object that can contain the following parameters.
+
+			<ul>
+				<li>curveSegments — int. Number of points on the curves. Default is 12.</li>
+				<li>steps — int. Number of points used for subdividing segments along the depth of the extruded spline. Default is 1.</li>
+				<li>depth — float. Depth to extrude the shape. Default is 100.</li>
+				<li>bevelEnabled — bool. Apply beveling to the shape. Default is true.</li>
+				<li>bevelThickness — float. How deep into the original shape the bevel goes. Default is 6.</li>
+				<li>bevelSize — float. Distance from the shape outline that the bevel extends. Default is bevelThickness - 2.</li>
+				<li>bevelSegments — int. Number of bevel layers. Default is 3.</li>
+				<li>extrudePath — THREE.CurvePath. A 3D spline path along which the shape should be extruded.</li>
+				<li>UVGenerator —  Object. object that provides UV generator functions</li>
+			</ul>
+
+		</p>
+		<p>
+			This object extrudes a 2D shape to a 3D geometry.
+		</p>
+
+		<p>
+			When creating a Mesh with this geometry, if you'd like to have a separate material used for its face
+			and its extruded sides, you can use an array of materials. The first material will be
+			applied to the face; the second material will be applied to the sides.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 53 - 0
docs/api/zh/geometries/IcosahedronBufferGeometry.html

@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:PolyhedronBufferGeometry] &rarr;
+		<h1>[name]</h1>
+
+		<p class="desc">A class for generating an icosahedron geometry.</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#IcosahedronBufferGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float radius], [param:Integer detail])</h3>
+		<p>
+		radius — Default is 1. <br />
+		detail — Default is 0.  Setting this to a value greater than 0 adds more vertices making it no longer an icosahedron.  When detail is greater than 1, it's effectively a sphere.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/geometries/IcosahedronGeometry.js src/geometries/IcosahedronGeometry.js]
+	</body>
+</html>

+ 54 - 0
docs/api/zh/geometries/IcosahedronGeometry.html

@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Geometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">A class for generating an icosahedron geometry.</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#IcosahedronGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float radius], [param:Integer detail])</h3>
+		<p>
+		radius — Default is 1. <br />
+		detail — Default is 0.  Setting this to a value greater than 0 adds more vertices making it no longer an icosahedron.  When detail is greater than 1, it's effectively a sphere.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 72 - 0
docs/api/zh/geometries/LatheBufferGeometry.html

@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:BufferGeometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">This is the [page:BufferGeometry] port of [page:LatheGeometry].</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#LatheBufferGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+		<code>
+		var points = [];
+		for ( var i = 0; i < 10; i ++ ) {
+			points.push( new THREE.Vector2( Math.sin( i * 0.2 ) * 10 + 5, ( i - 5 ) * 2 ) );
+		}
+		var geometry = new THREE.LatheBufferGeometry( points );
+		var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
+		var lathe = new THREE.Mesh( geometry, material );
+		scene.add( lathe );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Array points], [param:Integer segments], [param:Float phiStart], [param:Float phiLength])</h3>
+		<p>
+		points — Array of Vector2s. The x-coordinate of each point must be greater than zero.<br />
+		segments — the number of circumference segments to generate. Default is 12.<br />
+		phiStart — the starting angle in radians. Default is 0.<br />
+		phiLength — the radian (0 to 2PI) range of the lathed section 2PI is a closed lathe, less than 2PI is a portion. Default is 2PI.
+		</p>
+		<p>
+		This creates a LatheBufferGeometry based on the parameters.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/geometries/LatheGeometry.js src/geometries/LatheGeometry.js]
+	</body>
+</html>

+ 72 - 0
docs/api/zh/geometries/LatheGeometry.html

@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Geometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">Creates meshes with axial symmetry like vases. The lathe rotates around the Y axis.</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#LatheGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+		<code>
+		var points = [];
+		for ( var i = 0; i < 10; i ++ ) {
+			points.push( new THREE.Vector2( Math.sin( i * 0.2 ) * 10 + 5, ( i - 5 ) * 2 ) );
+		}
+		var geometry = new THREE.LatheGeometry( points );
+		var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
+		var lathe = new THREE.Mesh( geometry, material );
+		scene.add( lathe );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Array points], [param:Integer segments], [param:Float phiStart], [param:Float phiLength])</h3>
+		<p>
+		points — Array of Vector2s. The x-coordinate of each point must be greater than zero.<br />
+		segments — the number of circumference segments to generate. Default is 12.<br />
+		phiStart — the starting angle in radians. Default is 0.<br />
+		phiLength — the radian (0 to 2PI) range of the lathed section 2PI is a closed lathe, less than 2PI is a portion. Default is 2PI.
+		</p>
+		<p>
+		This creates a LatheGeometry based on the parameters.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 53 - 0
docs/api/zh/geometries/OctahedronBufferGeometry.html

@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:PolyhedronBufferGeometry] &rarr;
+		<h1>[name]</h1>
+
+		<p class="desc">A class for generating an octahedron geometry.</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#OctahedronBufferGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float radius], [param:Integer detail])</h3>
+		<p>
+		radius — Radius of the octahedron. Default is 1.<br />
+		detail — Default is 0.  Setting this to a value greater than zero add vertices making it no longer an octahedron.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/geometries/OctahedronGeometry.js src/geometries/OctahedronGeometry.js]
+	</body>
+</html>

+ 54 - 0
docs/api/zh/geometries/OctahedronGeometry.html

@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Geometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">A class for generating an octahedron geometry.</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#OctahedronGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float radius], [param:Integer detail])</h3>
+		<p>
+		radius — Radius of the octahedron. Default is 1.<br />
+		detail — Default is 0.  Setting this to a value greater than zero add vertices making it no longer an octahedron.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 67 - 0
docs/api/zh/geometries/ParametricBufferGeometry.html

@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:BufferGeometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">Generate geometry representing a parametric surface.</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#ParametricBufferGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+		<code>
+		var geometry = new THREE.ParametricBufferGeometry( THREE.ParametricGeometries.klein, 25, 25 );
+		var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
+		var klein = new THREE.Mesh( geometry, material );
+		scene.add( klein );
+		</code>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]([param:Function func], [param:Integer slices], [param:Integer stacks])</h3>
+		<p>
+		func — A function that takes in a [page:Float u] and [page:Float v] value each between 0 and 1 and modifies a third [page:Vector3] argument<br />
+		slices — The count of slices to use for the parametric function <br />
+		stacks — The count of stacks to use for the parametric function
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/geometries/ParametricGeometry.js src/geometries/ParametricGeometry.js]
+	</body>
+</html>

+ 68 - 0
docs/api/zh/geometries/ParametricGeometry.html

@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Geometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">Generate geometry representing a parametric surface.</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#ParametricGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+		<code>
+		var geometry = new THREE.ParametricGeometry( THREE.ParametricGeometries.klein, 25, 25 );
+		var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
+		var klein = new THREE.Mesh( geometry, material );
+		scene.add( klein );
+		</code>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]([param:Function func], [param:Integer slices], [param:Integer stacks])</h3>
+		<p>
+		func — A function that takes in a [page:Float u] and [page:Float v] value each between 0 and 1 and modifies a third [page:Vector3] argument<br />
+		slices — The count of slices to use for the parametric function <br />
+		stacks — The count of stacks to use for the parametric function
+		</p>
+
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 64 - 0
docs/api/zh/geometries/PlaneBufferGeometry.html

@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:BufferGeometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">This is the [page:BufferGeometry] port of [page:PlaneGeometry].</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#PlaneBufferGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+		<code>var geometry = new THREE.PlaneBufferGeometry( 5, 20, 32 );
+		var material = new THREE.MeshBasicMaterial( {color: 0xffff00, side: THREE.DoubleSide} );
+		var plane = new THREE.Mesh( geometry, material );
+		scene.add( plane );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float width], [param:Float height], [param:Integer widthSegments], [param:Integer heightSegments])</h3>
+		<p>
+		width — Width along the X axis. Default is 1.<br />
+		height — Height along the Y axis. Default is 1.<br />
+		widthSegments — Optional. Default is 1. <br />
+		heightSegments — Optional. Default is 1.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>.parameters</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/geometries/PlaneGeometry.js src/geometries/PlaneGeometry.js]
+	</body>
+</html>

+ 64 - 0
docs/api/zh/geometries/PlaneGeometry.html

@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Geometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">A class for generating plane geometries</p>
+
+		<iframe id="scene" src="scenes/geometry-browser.html#PlaneGeometry"></iframe>
+
+		<script>
+
+		// iOS iframe auto-resize workaround
+
+		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
+
+			var scene = document.getElementById( 'scene' );
+
+			scene.style.width = getComputedStyle( scene ).width;
+			scene.style.height = getComputedStyle( scene ).height;
+			scene.setAttribute( 'scrolling', 'no' );
+
+		}
+
+		</script>
+
+		<h2>Example</h2>
+
+		<code>var geometry = new THREE.PlaneGeometry( 5, 20, 32 );
+		var material = new THREE.MeshBasicMaterial( {color: 0xffff00, side: THREE.DoubleSide} );
+		var plane = new THREE.Mesh( geometry, material );
+		scene.add( plane );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]([param:Float width], [param:Float height], [param:Integer widthSegments], [param:Integer heightSegments])</h3>
+		<p>
+		width — Width along the X axis. Default is 1.<br />
+		height — Height along the Y axis. Default is 1.<br />
+		widthSegments — Optional. Default is 1. <br />
+		heightSegments — Optional. Default is 1.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>.parameters</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 64 - 0
docs/api/zh/geometries/PolyhedronBufferGeometry.html

@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:BufferGeometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<p class="desc">
+			A polyhedron is a solid in three dimensions with flat faces. This class will take an array of vertices,
+			project them onto a sphere, and then divide them up to the desired level of detail. This class is used
+			by [page:DodecahedronBufferGeometry], [page:IcosahedronBufferGeometry], [page:OctahedronBufferGeometry],
+			and [page:TetrahedronBufferGeometry] to generate their respective geometries.
+		</p>
+
+		<h2>Example</h2>
+<code>
+var verticesOfCube = [
+    -1,-1,-1,    1,-1,-1,    1, 1,-1,    -1, 1,-1,
+    -1,-1, 1,    1,-1, 1,    1, 1, 1,    -1, 1, 1,
+];
+
+var indicesOfFaces = [
+    2,1,0,    0,3,2,
+    0,4,7,    7,3,0,
+    0,1,5,    5,4,0,
+    1,2,6,    6,5,1,
+    2,3,7,    7,6,2,
+    4,5,6,    6,7,4
+];
+
+var geometry = new THREE.PolyhedronBufferGeometry( verticesOfCube, indicesOfFaces, 6, 2 );
+</code>
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]([param:Array vertices], [param:Array indices], [param:Float radius], [param:Integer detail])</h3>
+		<p>
+		vertices — [page:Array] of points of the form [1,1,1, -1,-1,-1, ... ] <br />
+		indices — [page:Array] of indices that make up the faces of the form [0,1,2, 2,3,0, ... ] <br />
+		radius — [page:Float] - The radius of the final shape <br />
+		detail — [page:Integer] - How many levels to subdivide the geometry. The more detail, the smoother the shape.
+		</p>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Object parameters]</h3>
+		<p>
+		An object with a property for each of the constructor parameters. Any modification after instantiation does not change the geometry.
+		</p>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/geometries/PolyhedronGeometry.js src/geometries/PolyhedronGeometry.js]
+	</body>
+</html>

部分文件因文件數量過多而無法顯示