Mr.doob 7 years ago
parent
commit
81c3be9654
100 changed files with 3885 additions and 3610 deletions
  1. 608 707
      build/three.js
  2. 364 355
      build/three.min.js
  3. 608 707
      build/three.module.js
  4. 6 3
      docs/api/audio/Audio.html
  5. 5 5
      docs/api/audio/PositionalAudio.html
  6. 0 8
      docs/api/cameras/Camera.html
  7. 5 2
      docs/api/cameras/OrthographicCamera.html
  8. 5 4
      docs/api/cameras/PerspectiveCamera.html
  9. 4 4
      docs/api/core/BufferGeometry.html
  10. 1 1
      docs/api/core/Face3.html
  11. 15 12
      docs/api/core/Geometry.html
  12. 18 3
      docs/api/core/Object3D.html
  13. 0 63
      docs/api/extras/CurveUtils.html
  14. 20 5
      docs/api/extras/core/Curve.html
  15. 0 23
      docs/api/extras/core/CurvePath.html
  16. 47 0
      docs/api/extras/core/Interpolations.html
  17. 11 7
      docs/api/extras/core/Shape.html
  18. 11 0
      docs/api/extras/curves/ArcCurve.html
  19. 21 11
      docs/api/extras/curves/CatmullRomCurve3.html
  20. 13 6
      docs/api/extras/curves/CubicBezierCurve.html
  21. 9 2
      docs/api/extras/curves/CubicBezierCurve3.html
  22. 17 9
      docs/api/extras/curves/EllipseCurve.html
  23. 7 0
      docs/api/extras/curves/LineCurve3.html
  24. 9 2
      docs/api/extras/curves/QuadraticBezierCurve.html
  25. 8 2
      docs/api/extras/curves/QuadraticBezierCurve3.html
  26. 10 3
      docs/api/extras/curves/SplineCurve.html
  27. 4 4
      docs/api/geometries/BoxBufferGeometry.html
  28. 4 4
      docs/api/geometries/BoxGeometry.html
  29. 2 2
      docs/api/geometries/CircleGeometry.html
  30. 4 4
      docs/api/geometries/CylinderGeometry.html
  31. 3 3
      docs/api/geometries/PlaneBufferGeometry.html
  32. 18 18
      docs/api/geometries/PlaneGeometry.html
  33. 2 2
      docs/api/geometries/PolyhedronBufferGeometry.html
  34. 2 2
      docs/api/geometries/PolyhedronGeometry.html
  35. 3 3
      docs/api/geometries/RingGeometry.html
  36. 2 2
      docs/api/geometries/SphereGeometry.html
  37. 1 1
      docs/api/geometries/TextBufferGeometry.html
  38. 3 3
      docs/api/geometries/TorusGeometry.html
  39. 3 3
      docs/api/geometries/TorusKnotGeometry.html
  40. 3 3
      docs/api/helpers/AxesHelper.html
  41. 64 0
      docs/api/helpers/Box3Helper.html
  42. 65 0
      docs/api/helpers/PlaneHelper.html
  43. 78 78
      docs/api/helpers/VertexNormalsHelper.html
  44. 2 4
      docs/api/lights/PointLight.html
  45. 0 15
      docs/api/lights/RectAreaLight.html
  46. 3 3
      docs/api/lights/SpotLight.html
  47. 2 2
      docs/api/lights/shadows/DirectionalLightShadow.html
  48. 0 54
      docs/api/lights/shadows/RectAreaLightShadow.html
  49. 3 3
      docs/api/loaders/AnimationLoader.html
  50. 8 0
      docs/api/loaders/FontLoader.html
  51. 17 7
      docs/api/loaders/TextureLoader.html
  52. 22 3
      docs/api/loaders/managers/LoadingManager.html
  53. 1 1
      docs/api/math/Box3.html
  54. 1 1
      docs/api/math/Frustum.html
  55. 4 4
      docs/api/math/Math.html
  56. 17 0
      docs/api/math/Matrix3.html
  57. 7 2
      docs/api/math/Vector2.html
  58. 2 2
      docs/api/math/Vector3.html
  59. 3 3
      docs/api/math/Vector4.html
  60. 0 6
      docs/api/objects/SkinnedMesh.html
  61. 8 0
      docs/api/renderers/WebGLRenderer.html
  62. 26 1
      docs/api/textures/Texture.html
  63. 0 234
      docs/examples/cameras/CombinedCamera.html
  64. 274 0
      docs/examples/controls/OrbitControls.html
  65. 92 0
      docs/examples/exporters/GLTFExporter.html
  66. 2 0
      docs/examples/geometries/ConvexBufferGeometry.html
  67. 2 0
      docs/examples/geometries/ConvexGeometry.html
  68. 57 0
      docs/examples/geometries/DecalGeometry.html
  69. 18 10
      docs/examples/loaders/BabylonLoader.html
  70. 0 103
      docs/examples/loaders/ColladaLoader.html
  71. 42 24
      docs/examples/loaders/GLTFLoader.html
  72. 670 0
      docs/examples/loaders/LoaderSupport.html
  73. 9 6
      docs/examples/loaders/MTLLoader.html
  74. 40 21
      docs/examples/loaders/OBJLoader.html
  75. 94 36
      docs/examples/loaders/OBJLoader2.html
  76. 24 8
      docs/examples/loaders/PCDLoader.html
  77. 23 25
      docs/examples/loaders/PDBLoader.html
  78. 108 0
      docs/examples/loaders/PRWMLoader.html
  79. 43 5
      docs/examples/loaders/SVGLoader.html
  80. 19 12
      docs/examples/loaders/TGALoader.html
  81. 0 404
      docs/examples/loaders/WWOBJLoader2.html
  82. 2 2
      docs/index.html
  83. 18 9
      docs/list.js
  84. 2 2
      docs/manual/buildTools/Testing-with-NPM.html
  85. 7 3
      docs/manual/introduction/Creating-a-scene.html
  86. 2 2
      docs/manual/introduction/Import-via-modules.html
  87. 1 1
      docs/manual/introduction/Useful-links.html
  88. 2 2
      docs/page.js
  89. 11 5
      editor/index.html
  90. 4 0
      editor/js/Config.js
  91. 19 56
      editor/js/Menubar.Add.js
  92. 24 1
      editor/js/Menubar.File.js
  93. 1 2
      editor/js/Sidebar.Material.js
  94. 47 20
      editor/js/Sidebar.Project.js
  95. 6 26
      editor/js/libs/app.js
  96. 4 27
      editor/js/libs/app/index.html
  97. 1 161
      editor/js/libs/tern-threejs/threejs.js
  98. 0 214
      examples/canvas_camera_orthographic2.html
  99. 4 1
      examples/canvas_geometry_panorama.html
  100. 4 1
      examples/canvas_geometry_panorama_fisheye.html

File diff suppressed because it is too large
+ 608 - 707
build/three.js


File diff suppressed because it is too large
+ 364 - 355
build/three.min.js


File diff suppressed because it is too large
+ 608 - 707
build/three.module.js


+ 6 - 3
docs/api/audio/Audio.html

@@ -35,8 +35,8 @@
 		//Load a sound and set it as the Audio object's buffer
 		audioLoader.load( 'sounds/ambient.ogg', function( buffer ) {
 			sound.setBuffer( buffer );
-			sound.setLoop(true);
-			sound.setVolume(0.5);
+			sound.setLoop( true );
+			sound.setVolume( 0.5 );
 			sound.play();
 		});
 		</code>
@@ -77,7 +77,10 @@
 		<div>Whether the audio is currently playing.</div>
 
 		<h3>[property:Number startTime]</h3>
-		<div>Point at which to start playback. Default is *0*.</div>
+		<div>The time at which the sound should begin to play. Same as the *when* paramter of [link:https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/start AudioBufferSourceNode.start](). Default is *0*.</div>
+
+		<h3>[property:Number offset]</h3>
+		<div>An offset to the time within the audio buffer that playback should begin. Same as the *offset* paramter of [link:https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/start AudioBufferSourceNode.start](). Default is *0*.</div>
 
 		<h3>[property:String source]</h3>
 		<div>An [link:https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode AudioBufferSourceNode] created

+ 5 - 5
docs/api/audio/PositionalAudio.html

@@ -33,9 +33,9 @@
 		//Load a sound and set it as the PositionalAudio object's buffer
 		var audioLoader = new THREE.AudioLoader();
 		audioLoader.load( 'sounds/song.ogg', function( buffer ) {
-			sound1.setBuffer( buffer );
-			sound1.setRefDistance( 20 );
-			sound1.play();
+			sound.setBuffer( buffer );
+			sound.setRefDistance( 20 );
+			sound.play();
 		});
 
 		//Create an object for the sound to play from
@@ -110,12 +110,12 @@
 
 		<h3>[method:PannerNode getMaxDistance]()</h3>
 		<div>
-		Returns the value of [link:https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/maxDistance panner.distanceModel].
+		Returns the value of [link:https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/maxDistance panner.maxDistance].
 		</div>
 
 		<h3>[method:PannerNode setMaxDistance]( [page:Number value] )</h3>
 		<div>
-		Sets the value of [link:https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/maxDistance panner.distanceModel].
+		Sets the value of [link:https://developer.mozilla.org/en-US/docs/Web/API/PannerNode/maxDistance panner.maxDistance].
 		</div>
 
 		<h2>Source</h2>

+ 0 - 8
docs/api/cameras/Camera.html

@@ -80,14 +80,6 @@
 		(which can be reused in this way), otherwise a new vector will be created.
 		</div>
 
-		<h3>[method:null lookAt]( [page:Vector3 target] )</h3>
-		<div>
-		target — position in 3D space for the camera to point towards<br /><br />
-
-		This makes the camera look at the vector position in the global space as long as
-		the parent of this camera is the scene or at position (0,0,0).
-		</div>
-
 		<h2>Source</h2>
 
 		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]

+ 5 - 2
docs/api/cameras/OrthographicCamera.html

@@ -25,7 +25,6 @@
 		<h2>Example</h2>
 
 		<div>[example:canvas_camera_orthographic camera / orthographic ]</div>
-		<div>[example:canvas_camera_orthographic2 camera / orthographic2 ]</div>
 		<div>[example:webgl_camera camera ]</div>
 		<div>[example:webgl_interactive_cubes_ortho interactive / cubes / ortho ]</div>
 		<div>[example:webgl_materials_cubemap_dynamic materials / cubemap / dynamic ]</div>
@@ -58,7 +57,11 @@ scene.add( camera );</code>
 
 
 		<h2>Properties</h2>
-		<div>See the base [page:Camera] class for common properties.</div>
+		<div>
+			See the base [page:Camera] class for common properties.<br>
+ 			Note that after making changes to most of these poperties you will have to call 
+ 			[page:OrthographicCamera.updateProjectionMatrix .updateProjectionMatrix] for the changes to take effect.
+		</div>
 
 		<h3>[property:Float bottom]</h3>
 		<div>Camera frustum bottom plane.</div>

+ 5 - 4
docs/api/cameras/PerspectiveCamera.html

@@ -48,7 +48,11 @@ scene.add( camera );</code>
 
 
 		<h2>Properties</h2>
-		<div>See the base [page:Camera] class for common properties.</div>
+		<div>
+			See the base [page:Camera] class for common properties.<br>
+			Note that after making changes to most of these poperties you will have to call 
+			[page:PerspectiveCamera.updateProjectionMatrix .updateProjectionMatrix] for the changes to take effect. 
+		</div>
 
 		<h3>[property:Float aspect]</h3>
 		<div>Camera frustum aspect ratio, usually the canvas width / canvas height. Default is *1* (square canvas).</div>
@@ -103,9 +107,6 @@ scene.add( camera );</code>
 		<div>Gets or sets the zoom factor of the camera. Default is *1*.</div>
 
 
-
-
-
 		<h2>Methods</h2>
 		<div>See the base [page:Camera] class for common methods.</div>
 

+ 4 - 4
docs/api/core/BufferGeometry.html

@@ -110,7 +110,7 @@
 		<h3>[property:Hashmap attributes]</h3>
 		<div>
 		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 addAttribute and getAttribute to access attributes of this geometry.
+		Rather than accessing this property directly, use [page:.addAttribute] and [page:.getAttribute] to access attributes of this geometry.
 		</div>
 
 		<h3>[property:Box3 boundingBox]</h3>
@@ -176,9 +176,6 @@
 			You should not change this, as it used internally for optimisation.
 		</div>
 
-		<h3>[property:Integer MaxIndex]</h3>
-		<div>Maximum number of vertices allowed, set to *65535*.</div>
-
 		<h3>[property:Object morphAttributes]</h3>
 		<div>
 			Hashmap of [page:BufferAttribute]s holding details of the geometry's [page:Geometry.morphTargets morphTargets].
@@ -319,6 +316,9 @@
 		<h3>[method:BufferGeometry setFromObject] ( [page:Object3D object] )</h3>
 		<div>Sets the attributes for this BufferGeometry from an [page:Object3D].</div>
 
+		<h3>[method:BufferGeometry setFromPoints] ( [page:Array points] )</h3>
+		<div>Sets the attributes for this BufferGeometry from an array of points.</div>
+
 		<h3>[method:Object toJSON]()</h3>
 		<div>Returns a JSON object representation of the BufferGeometry.</div>
 

+ 1 - 1
docs/api/core/Face3.html

@@ -21,7 +21,7 @@
 
 		<div>[example:misc_ubiquity_test ubiquity / test ]</div>
 		<div>[example:svg_sandbox svg / sandbox ]</div>
-		<div>[example:webgl_exporter_obj WebGL / exporter / obj ]</div>
+		<div>[example:misc_exporter_obj exporter / obj ]</div>
 		<div>[example:webgl_shaders_vector WebGL / shaders / vector ]</div>
 
 

+ 15 - 12
docs/api/core/Geometry.html

@@ -274,7 +274,7 @@
 		<div>
 		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, and not during a loop
+		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.
 		</div>
 
@@ -299,31 +299,34 @@
 
 		<h3>[method:Geometry rotateX] ( [page:Float radians] )</h3>
 		<div>
-		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.
+		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.
 		</div>
 
 		<h3>[method:Geometry rotateY] ( [page:Float radians] )</h3>
 		<div>
-		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.
+		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.
 		</div>
 
 		<h3>[method:Geometry rotateZ] ( [page:Float radians] )</h3>
 		<div>
-		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.
+		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.
 		</div>
 
+		<h3>[method:Geometry setFromPoints] ( [page:Array points] )</h3>
+		<div>Sets the vertices for this Geometry from an array of points.</div>
+
 		<h3>[method:null sortFacesByMaterialIndex] (  )</h3>
 		<div>
-			Sorts the faces array according to material index. For complex geometries with several materials,
-			this can result in reduced draw call and improved performance.
+		Sorts the faces array according to material index. For complex geometries with several materials,
+		this can result in reduced draw calls and improved performance.
 		</div>
 
 		<h3>[method:Geometry scale] ( [page:Float x], [page:Float y], [page:Float z] )</h3>
 		<div>
-		Scale the geometry data. This is typically done as a one time operation, and not during a loop
+		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.
 		</div>
 
@@ -332,8 +335,8 @@
 
 		<h3>[method:Geometry translate] ( [page:Float x], [page:Float y], [page:Float z] )</h3>
 		<div>
-		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.
+		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.
 		</div>
 
 

+ 18 - 3
docs/api/core/Object3D.html

@@ -112,7 +112,7 @@
 		<div>Object's parent in the [link:https://en.wikipedia.org/wiki/Scene_graph scene graph].</div>
 
 		<h3>[property:Vector3 position]</h3>
-		<div>The object's local position.</div>
+		<div>A [page:Vector3] representing the object's local position. Default is (0, 0, 0).</div>
 
 		<h3>[property:Quaternion quaternion]</h3>
 		<div>Object's local rotation as a [page:Quaternion Quaternion].</div>
@@ -287,11 +287,17 @@
 		Converts the vector from local space to world space.
 		</div>
 
-		<h3>[method:null lookAt]( [page:Vector3 vector] )</h3>
+		<h3>[method:null lookAt]( [page:Vector3 vector] )</br>
+		[method:null lookAt]( [page:Float x], [page:Float y], [page:Float z] )</h3>
 		<div>
 		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).
+		</div>
 
-		Rotates the object to face a point in world space.
 		</div>
 
 		<h3>[method:Array raycast]( [page:Raycaster raycaster], [page:Array intersects] )</h3>
@@ -314,6 +320,15 @@
 		Rotate an object along an axis in object space. The axis is assumed to be normalized.
 		</div>
 
+		<h3>[method:Object3D rotateOnWorldAxis]( [page:Vector3 axis], [page:Float angle] )</h3>
+		<div>
+		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.
+		</div>
+
 		<h3>[method:null rotateX]( [page:Float rad] )</h3>
 		<div>
 		rad - the angle to rotate in radians.<br /><br />

+ 0 - 63
docs/api/extras/CurveUtils.html

@@ -1,63 +0,0 @@
-<!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">
-		A class containing utility functions for curves.<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 curve.
-		</div>
-
-
-		<h2>Methods</h2>
-
-		<h3>[method:Number interpolate]( p0, p1, p2, p3, t )</h3>
-		<div>
-		t -- interpolation weight. <br />
-		p0, p1, p2, p4 -- the points defining the spline curve.<br /><br />
-
-		Used internally by [page:SplineCurve SplineCurve].
-		</div>
-
-		<h3>[method:Number tangentQuadraticBezier]( t, p0, p1, p2 )</h3>
-		<div>
-		t -- the point at which to calculate the tangent. <br />
-		p0, p1, p2 -- the three points defining the quadratic Bézier curve.<br /><br />
-
-		Calculate the tangent at the point t on a quadratic Bézier curve given by the three points.<br /><br />
-
-		Used internally by [page:QuadraticBezierCurve QuadraticBezierCurve].
-		</div>
-
-		<h3>[method:Number tangentCubicBezier]( t, p0, p1, p2, p3 )</h3>
-		<div>
-		t -- the point at which to calculate the tangent. <br />
-		p0, p1, p2, p3 -- the points defining the cubic Bézier curve.<br /><br />
-
-		Calculate the tangent at the point t on a cubic Bézier curve given by the four points.<br /><br />
-
-		Used internally by [page:CubicBezierCurve CubicBezierCurve].
-		</div>
-
-		<h3>[method:Number tangentSpline]( t, p0, p1, p2, p3 )</h3>
-		<div>
-		t -- the point at which to calculate the tangent. <br />
-		p0, p1, p2, p3 -- the points defining the spline curve.<br /><br />
-
-		Calculate the tangent at the point t on a spline curve given by the four points.
-		</div>
-
-		<h2>Source</h2>
-
-		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
-	</body>
-</html>

+ 20 - 5
docs/api/extras/core/Curve.html

@@ -31,13 +31,22 @@
 
 		<h2>Methods</h2>
 
-		<h3>[method:Vector getPoint]( [page:Float t] )</h3>
-		<div>Returns a vector for point t of the curve where t is between 0 and 1. Must be implemented in the extending curve.</div>
+		<h3>[method:Vector getPoint]( [page:Float t], [page:Vector optionalTarget] )</h3>
+		<div>
+			[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.
+		</div>
 
-		<h3>[method:Vector getPointAt]( [page:Float u] )</h3>
+		<h3>[method:Vector getPointAt]( [page:Float u], [page:Vector optionalTarget] )</h3>
 		<div>
-			Returns a vector for point at a relative position in curve according to arc length.
-			u is in the range [0, 1].
+			[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.
 		</div>
 
 		<h3>[method:Array getPoints]( [page:Integer divisions] )</h3>
@@ -88,6 +97,12 @@
 		Generates the Frenet Frames. Used in geometries like [page:TubeGeometry] or [page:ExtrudeGeometry].
 		</div>
 
+		<h3>[method:Curve clone]()</h3>
+		<div>Creates a clone of this curve.</div>
+
+		<h3>[method:Curve copy]( [page:Curve source] )</h3>
+		<div>Copies another curve to this instance.</div>
+
 		<h2>Source</h2>
 
 		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]

+ 0 - 23
docs/api/extras/core/CurvePath.html

@@ -49,29 +49,6 @@
 		<h3>[method:null closePath]()</h3>
 		<div>Adds a [page:LineCurve lineCurve] to close the path.</div>
 
-		<h3>[method:Geometry createGeometry]( [page:Vector3 points] )</h3>
-		<div>
-		points -- An array of [page:Vector3 Vector3s]<br /><br />
-
-		Creates a geometry from points
-		</div>
-
-		<h3>[method:Geometry createPointsGeometry]( [page:Integer divisions] )</h3>
-		<div>
-		divisions -- How many segments to create. Defaults to *12*.<br /><br />
-
-		Creates a [page:Geometry] object comprised of [page:Vector3 Vector3s], for example
-		to be used with [page:Line] or [page:Points]. Uses [page:Curve.getPoints]() for the division.
-		</div>
-
-		<h3>[method:Geometry createSpacedPointsGeometry]( [page:Integer divisions] )</h3>
-		<div>
-		divisions -- How many segments to create. Defaults to *12*.<br /><br />
-
-		Creates a [page:Geometry] object comprised of [page:Vector3]s that are equidistant, for example
-		to be used with [page:Line] or [page:Points].	Uses [page:Curve.getSpacedPoints]() for the division.
-		</div>
-
 		<h3>[method:Float getCurveLengths]()</h3>
 		<div>Adds together the lengths of the curves in the [page:.curves] array.</div>
 

+ 47 - 0
docs/api/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>
+
+		<div class="desc">
+		TODO
+		</div>
+
+		<h2>Methods</h2>
+
+		<h3>[method:Float CatmullRom]( [page:Float t], [page:Float p0], [page:Float p1], [page:Float p2], [page:Float p3] )</h3>
+		<div>
+		t -- interpolation weight.<br />
+		p0, p1, p2, p3 -- the points defining the spline curve.<br /><br />
+
+		Used internally by [page:SplineCurve SplineCurve].
+		</div>
+
+		<h3>[method:Float QuadraticBezier]( [page:Float t], [page:Float p0], [page:Float p1], [page:Float p2] )</h3>
+		<div>
+		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].
+		</div>
+
+		<h3>[method:Float CubicBezier]( [page:Float t], [page:Float p0], [page:Float p1], [page:Float p2], [page:Float p3] )</h3>
+		<div>
+		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].
+		</div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 11 - 7
docs/api/extras/core/Shape.html

@@ -41,14 +41,22 @@
 		[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/>
-		[example:webgl_particles_shapes particles / shapes ]
 		</div>
 
 
 		<h2>Constructor</h2>
 
 
-		<h3>[name]()</h3>
+		<h3>[name]( [page:Array points] )</h3>
+		<div>
+		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.
+		</div>
 
 
 		<h2>Properties</h2>
@@ -60,7 +68,7 @@
 		<h2>Methods</h2>
 		<div>See the base [page:Path] class for common methods.</div>
 
-		<h3>[method:Array extractAllPoints]( [page:Integer divisions] )</h3>
+		<h3>[method:Array extractPoints]( [page:Integer divisions] )</h3>
 		<div>
 		divisions -- The fineness of the result.<br /><br />
 
@@ -74,10 +82,6 @@
 		where shape and holes are arrays of [page:Vector2 Vector2s].
 		</div>
 
-		<h3>[method:Object extractPoints]( [page:Integer divisions] )</h3>
-		<div>This is identical to [page:.extractAllPoints].</div>
-
-
 		<h3>[method:Array getPointsHoles]( [page:Integer divisions] )</h3>
 		<div>
 		divisions -- The fineness of the result.<br /><br />

+ 11 - 0
docs/api/extras/curves/ArcCurve.html

@@ -14,6 +14,17 @@
 
 		<div class="desc">Alias for [page:EllipseCurve]</div>
 
+		<h2>Properties</h2>
+		<div>See the [page:EllipseCurve] class for common properties.</div>
+
+		<h3>[property:Boolean isArcCurve]</h3>
+		<div>
+			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.
+		</div>
+
+
 		<h2>Source</h2>
 
 		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]

+ 21 - 11
docs/api/extras/curves/CatmullRomCurve3.html

@@ -27,8 +27,8 @@ var curve = new THREE.CatmullRomCurve3( [
 	new THREE.Vector3( 10, 0, 10 )
 ] );
 
-var geometry = new THREE.Geometry();
-geometry.vertices = curve.getPoints( 50 );
+var points = curve.getPoints( 50 );
+var geometry = new THREE.BufferGeometry().setFromPoints( points );
 
 var material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
 
@@ -41,26 +41,36 @@ var curveObject = new THREE.Line( geometry, material );
 
 		<h2>Constructor</h2>
 
-		<h3>[name]( [page:Array points] )</h3>
-		<div>points – An array of [page:Vector3] points</div>
-
-
+		<h3>[name]( [page:Array points], [page:Boolean closed], [page:String curveType], [page:Float tension] )</h3>
+		<div>
+			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*.
+		</div>
 
 
 		<h2>Properties</h2>
 		<div>See the base [page:Curve] class for common properties.</div>
 
+		<h3>[property:Boolean isCatmullRomCurve3]</h3>
+		<div>
+			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.
+		</div>
+
 		<h3>[property:Array points]</h3>
-		<div>The array of array of [page:Vector3] points that define the curve.</div>
+		<div>The array of [page:Vector3] points that define the curve. It needs at least two entries.</div>
 
 		<h3>[property:Boolean closed]</h3>
-		<div>The curve will loop back onto itself when this is true. False by default</div>
+		<div>The curve will loop back onto itself when this is true.</div>
 
-		<h3>[property:String type]</h3>
-		<div>Possible values are `centripetal` (default), `chordal` and `catmullrom`.</div>
+		<h3>[property:String curveType]</h3>
+		<div>Possible values are *centripetal*, *chordal* and *catmullrom*.</div>
 
 		<h3>[property:float tension]</h3>
-		<div>When [page:.type] is `catmullrom`, defines catmullrom's tension. Defaults is *0.5*.</div>
+		<div>When [page:.type] is *catmullrom*, defines catmullrom's tension.</div>
 
 
 		<h2>Methods</h2>

+ 13 - 6
docs/api/extras/curves/CubicBezierCurve.html

@@ -22,15 +22,15 @@
 
 <code>
 var curve = new THREE.CubicBezierCurve(
-	new THREE.Vector2( -10, 0, 0 ),
-	new THREE.Vector2( -5, 15, 0 ),
-	new THREE.Vector2( 20, 15, 0 ),
-	new THREE.Vector2( 10, 0, 0 )
+	new THREE.Vector2( -10, 0 ),
+	new THREE.Vector2( -5, 15 ),
+	new THREE.Vector2( 20, 15 ),
+	new THREE.Vector2( 10, 0 )
 );
 
-var path = new THREE.Path( curve.getPoints( 50 ) );
+var points = curve.getPoints( 50 );
+var geometry = new THREE.BufferGeometry().setFromPoints( points );
 
-var geometry = path.createPointsGeometry( 50 );
 var material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
 
 // Create the final object to add to the scene
@@ -51,6 +51,13 @@ var curveObject = new THREE.Line( geometry, material );
 		<h2>Properties</h2>
 		<div>See the base [page:Curve] class for common properties.</div>
 
+		<h3>[property:Boolean isCubicBezierCurve]</h3>
+		<div>
+			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.
+		</div>
+
 		<h3>[property:Vector2 v0]</h3>
 		<div>The starting point.</div>
 

+ 9 - 2
docs/api/extras/curves/CubicBezierCurve3.html

@@ -28,8 +28,8 @@ var curve = new THREE.CubicBezierCurve3(
 	new THREE.Vector3( 10, 0, 0 )
 );
 
-var geometry = new THREE.Geometry();
-geometry.vertices = curve.getPoints( 50 );
+var points = curve.getPoints( 50 );
+var geometry = new THREE.BufferGeometry().setFromPoints( points );
 
 var material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
 
@@ -52,6 +52,13 @@ var curveObject = new THREE.Line( geometry, material );
 		<h2>Properties</h2>
 		<div>See the base [page:Curve] class for common properties.</div>
 
+		<h3>[property:Boolean isCubicBezierCurve3]</h3>
+		<div>
+			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.
+		</div>
+
 		<h3>[property:Vector2 v0]</h3>
 		<div>The starting point.</div>
 

+ 17 - 9
docs/api/extras/curves/EllipseCurve.html

@@ -28,8 +28,9 @@ var curve = new THREE.EllipseCurve(
 	0                 // aRotation
 );
 
-var path = new THREE.Path( curve.getPoints( 50 ) );
-var geometry = path.createPointsGeometry( 50 );
+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
@@ -41,13 +42,13 @@ var ellipse = new THREE.Line( geometry, material );
 
 		<h3>[name]( [page:Float aX], [page:Float aY], [page:Float xRadius], [page:Float yRadius], [page:Radians aStartAngle], [page:Radians aEndAngle], [page:Boolean aClockwise], [page:Radians aRotation] )</h3>
 		<div>
-			[page:Float aX] – The X center of the ellipse.<br/>
-			[page:Float aY] – The Y center of the ellipse.<br/>
-			[page:Float xRadius] – The radius of the ellipse in the x direction.<br/>
-			[page:Float yRadius] – The radius of the ellipse in the y direction.<br/>
-			[page:Radians aStartAngle] – The start angle of the curve in radians starting from the middle right side.<br/>
-			[page:Radians aEndAngle] – The end angle of the curve in radians starting from the middle right side.<br/>
-			[page:Boolean aClockwise] – Whether the ellipse is drawn clockwise.<br/>
+			[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.
@@ -56,6 +57,13 @@ var ellipse = new THREE.Line( geometry, material );
 		<h2>Properties</h2>
 		<div>See the base [page:Curve] class for common properties.</div>
 
+		<h3>[property:Boolean isEllipseCurve]</h3>
+		<div>
+			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.
+		</div>
+
 		<h3>[property:Float aX]</h3>
 		<div>The X center of the ellipse.</div>
 

+ 7 - 0
docs/api/extras/curves/LineCurve3.html

@@ -27,6 +27,13 @@
 		<h2>Properties</h2>
 		<div>See the base [page:Curve] class for common properties.</div>
 
+		<h3>[property:Boolean isLineCurve3]</h3>
+		<div>
+			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.
+		</div>
+
 		<h3>[property:Vector3 v1]</h3>
 		<div>The start point.</div>
 

+ 9 - 2
docs/api/extras/curves/QuadraticBezierCurve.html

@@ -27,9 +27,9 @@ var curve = new THREE.QuadraticBezierCurve(
 	new THREE.Vector2( 10, 0 )
 );
 
-var path = new THREE.Path( curve.getPoints( 50 ) );
+var points = curve.getPoints( 50 );
+var geometry = new THREE.BufferGeometry().setFromPoints( points );
 
-var geometry = path.createPointsGeometry( 50 );
 var material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
 
 //Create the final object to add to the scene
@@ -50,6 +50,13 @@ var curveObject = new THREE.Line( geometry, material );
 		<h2>Properties</h2>
 		<div>See the base [page:Curve] class for common properties.</div>
 
+		<h3>[property:Boolean isQuadraticBezierCurve]</h3>
+		<div>
+			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.
+		</div>
+
 
 		<h3>[property:Vector2 v0]</h3>
 		<div>The startpoint.</div>

+ 8 - 2
docs/api/extras/curves/QuadraticBezierCurve3.html

@@ -27,8 +27,8 @@ var curve = new THREE.QuadraticBezierCurve3(
 	new THREE.Vector3( 10, 0, 0 )
 );
 
-var geometry = new THREE.Geometry();
-geometry.vertices = curve.getPoints( 50 );
+var points = curve.getPoints( 50 );
+var geometry = new THREE.BufferGeometry().setFromPoints( points );
 
 var material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
 
@@ -51,6 +51,12 @@ var curveObject = new THREE.Line( geometry, material );
 		<h2>Properties</h2>
 		<div>See the base [page:Curve] class for common properties.</div>
 
+		<h3>[property:Boolean isQuadraticBezierCurve3]</h3>
+		<div>
+			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.
+		</div>
 
 		<h3>[property:Vector3 v0]</h3>
 		<div>The startpoint.</div>

+ 10 - 3
docs/api/extras/curves/SplineCurve.html

@@ -14,7 +14,7 @@
 
 		<div class="desc">
 		Create a smooth 2d spline curve from a series of points. Internally this uses
-		[page:CurveUtils.interpolate] to create the curve.
+		[page:Interpolations.CatmullRom] to create the curve.
 		</div>
 
 		<h2>Example</h2>
@@ -29,9 +29,9 @@ var curve = new THREE.SplineCurve( [
 	new THREE.Vector2( 10, 0 )
 ] );
 
-var path = new THREE.Path( curve.getPoints( 50 ) );
+var points = curve.getPoints( 50 );
+var geometry = new THREE.BufferGeometry().setFromPoints( points );
 
-var geometry = path.createPointsGeometry( 50 );
 var material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
 
 // Create the final object to add to the scene
@@ -48,6 +48,13 @@ var splineObject = new THREE.Line( geometry, material );
 		<h2>Properties</h2>
 		<div>See the base [page:Curve] class for common properties.</div>
 
+		<h3>[property:Boolean isSplineCurve]</h3>
+		<div>
+			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.
+		</div>
+
 		<h3>[property:Array points]</h3>
 		<div>The array of [page:Vector3] points that define the curve.</div>
 

+ 4 - 4
docs/api/geometries/BoxBufferGeometry.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en">
 	<head>
-		<meta charset="utf-8" />
+		<meta charset="utf-8" />
 		<base href="../../" />
 		<script src="list.js"></script>
 		<script src="page.js"></script>
@@ -44,9 +44,9 @@
 
 		<h3>[name]([page:Float width], [page:Float height], [page:Float depth], [page:Integer widthSegments], [page:Integer heightSegments], [page:Integer depthSegments])</h3>
 		<div>
-		width — Width of the sides on the X axis.<br />
-		height — Height of the sides on the Y axis.<br />
-		depth — Depth of the sides on the Z axis.<br />
+		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.

+ 4 - 4
docs/api/geometries/BoxGeometry.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en">
 	<head>
-		<meta charset="utf-8" />
+		<meta charset="utf-8" />
 		<base href="../../" />
 		<script src="list.js"></script>
 		<script src="page.js"></script>
@@ -44,9 +44,9 @@
 
 		<h3>[name]([page:Float width], [page:Float height], [page:Float depth], [page:Integer widthSegments], [page:Integer heightSegments], [page:Integer depthSegments])</h3>
 		<div>
-		width — Width of the sides on the X axis.<br />
-		height — Height of the sides on the Y axis.<br />
-		depth — Depth of the sides on the Z axis.<br />
+		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.

+ 2 - 2
docs/api/geometries/CircleGeometry.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en">
 	<head>
-		<meta charset="utf-8" />
+		<meta charset="utf-8" />
 		<base href="../../" />
 		<script src="list.js"></script>
 		<script src="page.js"></script>
@@ -46,7 +46,7 @@
 
 		<h3>[name]([page:Float radius], [page:Integer segments], [page:Float thetaStart], [page:Float thetaLength])</h3>
 		<div>
-		radius — Radius of the circle, default = 50.<br />
+		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.

+ 4 - 4
docs/api/geometries/CylinderGeometry.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en">
 	<head>
-		<meta charset="utf-8" />
+		<meta charset="utf-8" />
 		<base href="../../" />
 		<script src="list.js"></script>
 		<script src="page.js"></script>
@@ -44,9 +44,9 @@
 
 		<h3>[name]([page:Float radiusTop], [page:Float radiusBottom], [page:Float height], [page:Integer radiusSegments], [page:Integer heightSegments], [page:Boolean openEnded], [page:Float thetaStart], [page:Float thetaLength])</h3>
 		<div>
-		radiusTop — Radius of the cylinder at the top. Default is 20.<br />
-		radiusBottom — Radius of the cylinder at the bottom. Default is 20.<br />
-		height — Height of the cylinder. Default is 100.<br />
+		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 />
 		radiusSegments — 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 />

+ 3 - 3
docs/api/geometries/PlaneBufferGeometry.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en">
 	<head>
-		<meta charset="utf-8" />
+		<meta charset="utf-8" />
 		<base href="../../" />
 		<script src="list.js"></script>
 		<script src="page.js"></script>
@@ -44,8 +44,8 @@
 
 		<h3>[name]([page:Float width], [page:Float height], [page:Integer widthSegments], [page:Integer heightSegments])</h3>
 		<div>
-		width — Width along the X axis.<br />
-		height — Height along the Y axis.<br />
+		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.
 		</div>

+ 18 - 18
docs/api/geometries/PlaneGeometry.html

@@ -15,22 +15,22 @@
 		<div class="desc">A class for generating plane geometries</div>
 
 		<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>
+
+		<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>
 
@@ -44,8 +44,8 @@
 
 		<h3>[name]([page:Float width], [page:Float height], [page:Integer widthSegments], [page:Integer heightSegments])</h3>
 		<div>
-		width — Width along the X axis.<br />
-		height — Height along the Y axis.<br />
+		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.
 		</div>

+ 2 - 2
docs/api/geometries/PolyhedronBufferGeometry.html

@@ -41,10 +41,10 @@ var geometry = new THREE.PolyhedronBufferGeometry( verticesOfCube, indicesOfFace
 		<h2>Constructor</h2>
 
 
-		<h3>[name]([page:Array vertices], [page:Array faces], [page:Float radius], [page:Integer detail])</h3>
+		<h3>[name]([page:Array vertices], [page:Array indices], [page:Float radius], [page:Integer detail])</h3>
 		<div>
 		vertices — [page:Array] of points of the form [1,1,1, -1,-1,-1, ... ] <br />
-		faces — [page:Array] of indices that make up the faces of the form [0,1,2, 2,3,0, ... ] <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.
 		</div>

+ 2 - 2
docs/api/geometries/PolyhedronGeometry.html

@@ -39,10 +39,10 @@ var geometry = new THREE.PolyhedronGeometry( verticesOfCube, indicesOfFaces, 6,
 		<h2>Constructor</h2>
 
 
-		<h3>[name]([page:Array vertices], [page:Array faces], [page:Float radius], [page:Integer detail])</h3>
+		<h3>[name]([page:Array vertices], [page:Array indices], [page:Float radius], [page:Integer detail])</h3>
 		<div>
 		vertices — [page:Array] of points of the form [1,1,1, -1,-1,-1, ... ] <br />
-		faces — [page:Array] of indices that make up the faces of the form [0,1,2, 2,3,0, ... ] <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.
 		</div>

+ 3 - 3
docs/api/geometries/RingGeometry.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en">
 	<head>
-		<meta charset="utf-8" />
+		<meta charset="utf-8" />
 		<base href="../../" />
 		<script src="list.js"></script>
 		<script src="page.js"></script>
@@ -44,8 +44,8 @@
 
 		<h3>[name]([page:Float innerRadius], [page:Float outerRadius], [page:Integer thetaSegments], [page:Integer phiSegments], [page:Float thetaStart], [page:Float thetaLength])</h3>
 		<div>
-		innerRadius — Default is 20. <br />
-		outerRadius — Default is 50. <br />
+		innerRadius — Default is 0.5. <br />
+		outerRadius — Default is 1. <br />
 		thetaSegments — Number of segments.  A higher number means the ring will be more round.  Minimum is 3.  Default is 8. <br />
 		phiSegments — Minimum is 1.  Default is 8.<br />
 		thetaStart — Starting angle. Default is 0. <br />

+ 2 - 2
docs/api/geometries/SphereGeometry.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en">
 	<head>
-		<meta charset="utf-8" />
+		<meta charset="utf-8" />
 		<base href="../../" />
 		<script src="list.js"></script>
 		<script src="page.js"></script>
@@ -45,7 +45,7 @@
 		<h3>[name]([page:Float radius], [page:Integer widthSegments], [page:Integer heightSegments], [page:Float phiStart], [page:Float phiLength], [page:Float thetaStart], [page:Float thetaLength])</h3>
 
 		<div>
-		radius — sphere radius. Default is 50.<br />
+		radius — sphere radius. Default is 1.<br />
 		widthSegments — number of horizontal segments. Minimum value is 3, and the default is 8.<br />
 		heightSegments — number of vertical segments. Minimum value is 2, and the default is 6.<br />
 		phiStart — specify horizontal starting angle. Default is 0.<br />

+ 1 - 1
docs/api/geometries/TextBufferGeometry.html

@@ -40,7 +40,7 @@
 
 		<div>
 		[example:webgl_geometry_text geometry / text ]<br/>
-		[example:webgl_geometry_text2 geometry / text2 ]
+		[example:webgl_geometry_text_pnltri geometry / text2 ]
 		</div>
 
 		<code>

+ 3 - 3
docs/api/geometries/TorusGeometry.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en">
 	<head>
-		<meta charset="utf-8" />
+		<meta charset="utf-8" />
 		<base href="../../" />
 		<script src="list.js"></script>
 		<script src="page.js"></script>
@@ -44,8 +44,8 @@
 
 		<h3>[name]([page:Float radius], [page:Float tube], [page:Integer radialSegments], [page:Integer tubularSegments], [page:Float arc])</h3>
 		<div>
-		radius — Default is 100. <br />
-		tube — Diameter of the tube.  Default is 40. <br />
+		radius — Default is 1. <br />
+		tube — Diameter of the tube.  Default is 0.4. <br />
 		radialSegments — Default is 8 <br />
 		tubularSegments — Default is 6. <br />
 		arc — Central angle.  Default is Math.PI * 2.

+ 3 - 3
docs/api/geometries/TorusKnotGeometry.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en">
 	<head>
-		<meta charset="utf-8" />
+		<meta charset="utf-8" />
 		<base href="../../" />
 		<script src="list.js"></script>
 		<script src="page.js"></script>
@@ -45,8 +45,8 @@
 		<h3>[name]([page:Float radius], [page:Float tube], [page:Integer tubularSegments], [page:Integer radialSegments], [page:Integer p], [page:Integer q])</h3>
 		<div>
 			<ul>
-				<li>radius — Default is 100.</li>
-				<li>tube — Diameter of the tube. Default is 40.</li>
+				<li>radius — Default is 1.</li>
+				<li>tube — Diameter of the tube. Default is 0.4.</li>
 				<li>tubularSegments — Default is 64.</li>
 				<li>radialSegments — Default is 8.</li>
 				<li>p — This value determines, how many times the geometry winds around its axis of rotational symmetry. Default is 2.</li>

+ 3 - 3
docs/api/helpers/AxisHelper.html → docs/api/helpers/AxesHelper.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en">
 	<head>
-		<meta charset="utf-8" />
+		<meta charset="utf-8" />
 		<base href="../../" />
 		<script src="list.js"></script>
 		<script src="page.js"></script>
@@ -26,8 +26,8 @@
 
 
 		<code>
-var axisHelper = new THREE.AxisHelper( 5 );
-scene.add( axisHelper );
+var axesHelper = new THREE.AxesHelper( 5 );
+scene.add( axesHelper );
     </code>
 
 		<h2>Constructor</h2>

+ 64 - 0
docs/api/helpers/Box3Helper.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:LineSegments] &rarr;
+
+		<h1>[name]</h1>
+
+		<div class="desc">
+			Helper object to visualize a [page:Box3].
+		</div>
+
+
+		<h2>Example</h2>
+
+		<code>
+		var box = new THREE.Box3();
+		box.setFromCenterAndSize( new THREE.Vector3( 1, 1, 1 ), new THREE.Vector3( 2, 1, 3 ) );
+
+		var helper = new THREE.Box3Helper( box, 0xffff00 );
+		scene.add( helper );
+		</code>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [page:Box3 box], [page:Color color] )</h3>
+		<div>
+		[page:Box3 box]  -- the Box3 to show.<br />
+		[page:Color color] --  (optional) the box's color. Default is 0xffff00.<br /><br />
+
+		Creates a new wireframe box that represents the passed Box3.
+		</div>
+
+		<h2>Properties</h2>
+		<div>See the base [page:LineSegments] class for common properties.</div>
+
+		<h3>[property:Box3 box]</h3>
+		<div>The Box3 being visualized.</div>
+
+
+		<h2>Methods</h2>
+		<div>See the base [page:LineSegments] class for common methods.</div>
+
+
+		<h3>[method:void updateMatrixWorld]( force )</h3>
+		<div>
+			This overrides the method in the base [page:Object3D] class so that it
+			also updates the wireframe box to the extent of the [page:Box3Helper.box .box]
+			property.
+		</div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 65 - 0
docs/api/helpers/PlaneHelper.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:LineSegments] &rarr;
+
+		<h1>[name]</h1>
+
+		<div class="desc">
+			Helper object to visualize a [page:Plane].
+		</div>
+
+
+		<h2>Example</h2>
+
+		<code>
+		var plane = new THREE.Plane( new THREE.Vector3( 1, 1, 0.2 ), 3 );
+		var helper = new THREE.PlaneHelper( plane, 1, 0xffff00 );
+		scene.add( helper );
+		</code>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [page:Plane plane], [page:Float size], [page:Color hex] )</h3>
+		<div>
+		[page:Plane plane] --  the plane to visualize.<br />
+		[page:Float size] -- (optional) side length of plane helper. Default is 1.<br />
+		[page:Color color] --  (optional) the color of the helper. Default is 0xffff00.<br /><br />
+
+		Creates a new wireframe representation of the passed plane.
+		</div>
+
+		<h2>Properties</h2>
+		<div>See the base [page:LineSegments] class for common properties.</div>
+
+		<h3>[property:Plane plane]</h3>
+		<div>The [page:Plane plane] being visualized.</div>
+
+		<h3>[property:Float size]</h3>
+		<div>The side lengths of plane helper.</div>
+
+
+		<h2>Methods</h2>
+		<div>See the base [page:LineSegments] class for common methods.</div>
+
+		<h3>[method:void updateMatrixWorld]( force )</h3>
+		<div>
+			This overrides the method in the base [page:Object3D] class so that it also
+			updates the helper object according to the [page:PlaneHelper.plane .plane] and
+			[page:PlaneHelper.size .size] properties.
+		</div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 78 - 78
docs/api/helpers/VertexNormalsHelper.html

@@ -1,79 +1,79 @@
-<!DOCTYPE html>
-<html lang="en">
-	<head>
+<!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:Line] &rarr;
-
-		<h1>[name]</h1>
-
-		<div class="desc">
-			Renders [page:ArrowHelper arrows] to visualize an object's vertex normal vectors.
-			Requires that normals have been specified in a [page:BufferAttribute custom attribute] or
-			have been calculated using [page:Geometry.computeVertexNormals computeVertexNormals].<br /><br />
-
-			Unline [page:FaceNormalsHelper], this works with [page:BufferGeometry].
-		</div>
-
-		<h2>Example</h2>
-
-		[example:webgl_helpers WebGL / helpers]
-
-		<code>
-		var geometry = new THREE.BoxGeometry( 10, 10, 10, 2, 2, 2 );
-		var material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
-		var box = new THREE.Mesh( geometry, material );
-
-		var helper = new THREE.VertexNormalsHelper( box, 2, 0x00ff00, 1 );
-
-		scene.add( box );
-		scene.add( helper );
-		</code>
-
-
-		<h2>Constructor</h2>
-
-
-		<h3>[name]( [page:Object3D object], [page:Number size], [page:Hex color], [page:Number linewidth] )</h3>
-		<div>
-			[page:Object3D object] -- object for which to render vertex normals.<br />
-			[page:Number size] -- (optional) length of the arrows. Default is 1.<br />
-			[page:Hex color] -- hex color of the arrows. Default is 0xff0000.<br />
-			[page:Number linewidth] -- (optional) width of the arrow lines. Default is 1.
-		</div>
-
-
-		<h2>Properties</h2>
-		<div>See the base [page:LineSegments] class for common properties.</div>
-
-		<h3>[property:object matrixAutoUpdate]</h3>
-		<div>
-			See [page:Object3D.matrixAutoUpdate]. Set to *false* here as the helper is using the
-			objects's [page:Object3D.matrixWorld matrixWorld].
-		</div>
-
-		<h3>[property:Object3D object]</h3>
-		<div>The object for which the vertex normals are being visualized.</div>
-
-		<h3>[property:Number size]</h3>
-		<div>Length of the arrows. Default is *1*.</div>
-
-
-		<h2>Methods</h2>
-		<div>See the base [page:LineSegments] class for common methods.</div>
-
-
-		<h3>[method:null update]()</h3>
-		<div>Updates the vertex normal preview based on movement of the object.</div>
-
-
-		<h2>Source</h2>
-
-		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
-	</body>
-</html>
+		<base href="../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Line] &rarr;
+
+		<h1>[name]</h1>
+
+		<div class="desc">
+			Renders [page:ArrowHelper arrows] to visualize an object's vertex normal vectors.
+			Requires that normals have been specified in a [page:BufferAttribute custom attribute] or
+			have been calculated using [page:Geometry.computeVertexNormals computeVertexNormals].<br /><br />
+
+			Unlike [page:FaceNormalsHelper], this works with [page:BufferGeometry].
+		</div>
+
+		<h2>Example</h2>
+
+		[example:webgl_helpers WebGL / helpers]
+
+		<code>
+		var geometry = new THREE.BoxGeometry( 10, 10, 10, 2, 2, 2 );
+		var material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
+		var box = new THREE.Mesh( geometry, material );
+
+		var helper = new THREE.VertexNormalsHelper( box, 2, 0x00ff00, 1 );
+
+		scene.add( box );
+		scene.add( helper );
+		</code>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [page:Object3D object], [page:Number size], [page:Hex color], [page:Number linewidth] )</h3>
+		<div>
+			[page:Object3D object] -- object for which to render vertex normals.<br />
+			[page:Number size] -- (optional) length of the arrows. Default is 1.<br />
+			[page:Hex color] -- hex color of the arrows. Default is 0xff0000.<br />
+			[page:Number linewidth] -- (optional) width of the arrow lines. Default is 1.
+		</div>
+
+
+		<h2>Properties</h2>
+		<div>See the base [page:LineSegments] class for common properties.</div>
+
+		<h3>[property:object matrixAutoUpdate]</h3>
+		<div>
+			See [page:Object3D.matrixAutoUpdate]. Set to *false* here as the helper is using the
+			objects's [page:Object3D.matrixWorld matrixWorld].
+		</div>
+
+		<h3>[property:Object3D object]</h3>
+		<div>The object for which the vertex normals are being visualized.</div>
+
+		<h3>[property:Number size]</h3>
+		<div>Length of the arrows. Default is *1*.</div>
+
+
+		<h2>Methods</h2>
+		<div>See the base [page:LineSegments] class for common methods.</div>
+
+
+		<h3>[method:null update]()</h3>
+		<div>Updates the vertex normal preview based on movement of the object.</div>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 2 - 4
docs/api/lights/PointLight.html

@@ -27,9 +27,7 @@
 			[example:webgl_lights_pointlights lights / pointlights ]<br />
 			[example:webgl_lights_pointlights2 lights / pointlights2 ]<br />
 			[example:webgldeferred_animation animation ]<br />
-			[example:webgldeferred_pointlights pointlights ]<br />
 			[example:webgl_effects_anaglyph effects / anaglyph ]<br />
-			[example:webgl_geometry_large_mesh geometry / large / mesh ]<br />
 			[example:webgl_geometry_text geometry / text ]<br />
 			[example:webgl_lensflares lensflares ]
 		</div>
@@ -84,11 +82,11 @@ scene.add( light );
 		<div>
 			The light's power.<br />
 			In [page:WebGLRenderer.physicallyCorrectLights physically correct] mode, the luminous
-			power of the light measured in lumens. Default - *4PI*. <br /><br />
+			power of the light measured in lumens. Default is *4Math.PI*. <br /><br />
 
 			This is directly related to the [page:.intensity intensity] in the ratio
 			<code>
-				power = intensity * 4&Pi;
+				power = intensity * 4&pi;
 			</code>
 			and changing this will also change the intensity.
 		</div>

+ 0 - 15
docs/api/lights/RectAreaLight.html

@@ -16,8 +16,6 @@
 			This light gets emitted uniformly across the face a rectangular plane. This can be
 			used to simulate things like bright windows or strip lighting.<br /><br />
 
-			This light can cast shadows - see the [page:RectAreaLightShadow] page for details.<br /><br />
-
 			<em>NOTE:</em> this class is currently under active development and is probably not
 			production ready yet (as of r83). Check back in a month or two! And feel free to try it out in the meantime.
 		</div>
@@ -28,7 +26,6 @@
 		<h2>Examples</h2>
 
 		<div>
-			[example:webgl_lights_arealight WebGL / arealight ]<br />
 			[example:webgl_lights_rectarealight WebGL / rectarealight ]
 
 			<code>
@@ -70,10 +67,6 @@ scene.add( rectLightHelper );
 
 		<h3>[property:Boolean castShadow]</h3>
 		<div>
-			If set to *true* light will cast dynamic shadows. *Warning*: This is expensive and
-			requires tweaking to get shadows looking right. See the [page:RectAreaLightShadow] for details.
-			The default is *false*.<br /><br />
-
 			<em>Note:</em> this is not yet implemented for this light type! (r83)
 		</div>
 
@@ -106,14 +99,6 @@ scene.add( rectLightHelper );
 			This is set equal to [page:Object3D.DefaultUp] (0, 1, 0), so that the light shines from the top down.
 		</div>
 
-		<h3>[property:RectAreaLightShadow shadow]</h3>
-		<div>
-			A [page:RectAreaLightShadow] used to calculate shadows for this light.<br /><br />
-
-			<em>Note:</em> this is not yet implemented for this light type! (r83)
-		</div>
-
-
 		<h3>[property:Object3D target]</h3>
 		<div>
 			The RectAreaLight points from its [page:.position position] to target.position. The default

+ 3 - 3
docs/api/lights/SpotLight.html

@@ -36,7 +36,7 @@
 			[example:webgl_interactive_draggablecubes interactive / draggablecubes ]<br />
 			[example:webgl_materials_bumpmap_skin materials / bumpmap / skin ]<br />
 			[example:webgl_materials_cubemap_dynamic materials / cubemap / dynamic ]<br />
-			[example:webgl_morphtargets_md2 morphtargets / md2 ]<br />
+			[example:webgl_loader_md2 loader / md2 ]<br />
 			[example:webgl_shading_physical shading / physical ]<br />
 			[example:webgl_materials_bumpmap materials / bumpmap]<br/>
 			[example:webgl_shading_physical shading / physical]<br/>
@@ -135,11 +135,11 @@
 		<div>
 			The light's power.<br />
 			In [page:WebGLRenderer.physicallyCorrectLights physically correct] mode, the luminous
-			power of the light measured in lumens. Default - *4PI*. <br /><br />
+			power of the light measured in lumens. Default is *4Math.PI*. <br /><br />
 
 			This is directly related to the [page:.intensity intensity] in the ratio
 			<code>
-				power = intensity * &Pi;
+				power = intensity * &pi;
 			</code>
 			and changing this will also change the intensity.
 		</div>

+ 2 - 2
docs/api/lights/shadows/DirectionalLightShadow.html

@@ -37,8 +37,8 @@ scene.add( light );
 //Set up shadow properties for the light
 light.shadow.mapSize.width = 512;  // default
 light.shadow.mapSize.height = 512; // default
-light.shadow.camera.near = 0.5;       // default
-light.shadow.camera.far = 500      // default
+light.shadow.camera.near = 0.5;    // default
+light.shadow.camera.far = 500;     // default
 
 //Create a sphere that cast shadows (but does not receive them)
 var sphereGeometry = new THREE.SphereBufferGeometry( 5, 32, 32 );

+ 0 - 54
docs/api/lights/shadows/RectAreaLightShadow.html

@@ -1,54 +0,0 @@
-<!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">
-			<em>Note: this is currently being developed and does nothing at the moment (r83).
-				Check back in a while!</em><br /><br />
-
-			This used internally by [page:RectAreaLight RectAreaLight] for calculating shadows.
-		</div>
-
-
-		<!--
-		<h2>Example</h2>
-		<div>
-			<code>
-			</code>
-		</div>
-	-->
-
-		<h2>Constructor</h2>
-
-		<h3>[name]( [page:Camera camera] )</h3>
-		<div>
-		[page:Camera camera] - the light's view of the world.<br /><br />
-
-		Create a new [name]. This is not intended to be called directly - it is called
-		internally by [page:RectAreaLight].
-		</div>
-
-		<h2>Properties</h2>
-		<div>
-			See the base [page:LightShadow] class for common properties.
-		</div>
-
-		<h2>Methods</h2>
-		<div>
-			See the base [page:LightShadow] class for common methods.
-		</div>
-
-		<h2>Source</h2>
-
-		[link:https://github.com/mrdoob/three.js/blob/master/src/lights/[name].js src/lights/[name].js]
-	</body>
-</html>

+ 3 - 3
docs/api/loaders/AnimationLoader.html

@@ -11,7 +11,7 @@
 		<h1>[name]</h1>
 
 		<div class="desc">
-			Class for loading an animation in JSON format.
+			Class for loading [page:AnimationClip AnimationClips] in JSON format.
 			This uses the [page:FileLoader] internally for loading files.
 		</div>
 
@@ -26,8 +26,8 @@
 			// resource URL
 			'animations/animation.js',
 			// Function when resource is loaded
-			function ( animation ) {
-				// do something with the animation
+			function ( animations ) {
+				// animations is an array of AnimationClips
 			},
 			// Function called when download progresses
 			function ( xhr ) {

+ 8 - 0
docs/api/loaders/FontLoader.html

@@ -63,6 +63,8 @@
 			The [page:LoadingManager loadingManager] the loader is using. Default is [page:DefaultLoadingManager].
 		</div>
 
+		<h3>[property:String path]</h3>
+		<div>The base path from which fonts will be loaded. See [page:.setPath]. Default is *undefined*.</div>
 
 		<h2>Methods</h2>
 
@@ -83,6 +85,12 @@
 		Parse a <em>JSON</em> structure and return a [page:Font].
 		</div>
 
+		<h3>[method:FontLoader setPath]( [page:String path] )</h3>
+		<div>
+			Set the base path or URL from which to load fonts. This can be useful if
+			you are loading many fonts from the same directory.
+		</div>
+
 		<h2>Source</h2>
 
 		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]

+ 17 - 7
docs/api/loaders/TextureLoader.html

@@ -17,6 +17,17 @@
 
 		<h2>Example</h2>
 
+		<code>
+		var texture = new THREE.TextureLoader().load( 'textures/land_ocean_ice_cloud_2048.jpg' );
+
+		// immediately use the texture for material creation
+		var material = new THREE.MeshBasicMaterial( { map: texture } );
+		</code>
+
+		[example:webgl_geometry_cube geometry / cube]
+
+		<h2>Example with Callbacks</h2>
+
 		<code>
 		// instantiate a loader
 		var loader = new THREE.TextureLoader();
@@ -27,24 +38,22 @@
 			'textures/land_ocean_ice_cloud_2048.jpg',
 			// Function when resource is loaded
 			function ( texture ) {
-				// do something with the texture
+				// in this example we create the material when the texture is loaded
 				var material = new THREE.MeshBasicMaterial( {
 					map: texture
 				 } );
 			},
 			// Function called when download progresses
 			function ( xhr ) {
-				console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
+				console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
 			},
 			// Function called when download errors
 			function ( xhr ) {
-				console.log( 'An error happened' );
+				console.error( 'An error happened' );
 			}
 		);
 		</code>
 
-		[example:canvas_geometry_earth]
-
 		<h2>Constructor</h2>
 
 		<h3>[name]( [page:LoadingManager manager] )</h3>
@@ -81,7 +90,7 @@
 
 		<h2>Methods</h2>
 
-		<h3>[method:null load]( [page:String url], [page:Function onLoad], [page:Function onProgress], [page:Function onError] )</h3>
+		<h3>[method:Texture load]( [page:String url], [page:Function onLoad], [page:Function onProgress], [page:Function onError] )</h3>
 		<div>
 		[page:String url] — the path or URL to the file. This can also be a
 			[link:https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs Data URI].<br />
@@ -89,7 +98,8 @@
 		[page:Function onProgress] — Will be called while load progresses. The argument will be the XMLHttpRequest instance, which contains .[page:Integer total] and .[page:Integer loaded] bytes.<br />
 		[page:Function onError] — Will be called when load errors.<br /><br />
 
-		Begin loading from url and pass the loaded [page:Texture texture] to onLoad.
+		Begin loading from the given URL and pass the fully loaded [page:Texture texture] to onLoad. The method also returns a new texture object which can directly be used for material creation.
+		If you do it this way, the texture may pop up in your scene once the respective loading process is finished.
 		</div>
 
 		<h3>[method:null setCrossOrigin]( [page:String value] )</h3>

+ 22 - 3
docs/api/loaders/managers/LoadingManager.html

@@ -121,6 +121,25 @@
 
 		<h2>Methods</h2>
 
+		<h3>[method:null setURLModifier]( [page:Function callback] )</h3>
+		<div>
+		[page:Function callback] — URL modifier callback. Called with [page:String url] argument, and
+		must return [page:String resolvedURL].<br /><br />
+
+		If provided, the callback will be passed each resource URL before a request is sent. The
+		callback may return the original URL, or a new URL to override loading behavior. This
+		behavior can be used to load assets from .ZIP files, drag-and-drop APIs, and Data URIs.
+		</div>
+
+		<h3>[method:String resolveURL]( [page:String url] )</h3>
+		<div>
+		[page:String url] — the url to load<br /><br />
+
+		Given a URL, uses the URL modifier callback (if any) and returns a resolved URL. If no
+		URL modifier is set, returns the original URL.
+		</div>
+
+		<br /><br />
 		<div>
 			<em>Note: The following methods are designed to be called internally by loaders. You shouldn't call
 			them directly.</em>
@@ -130,14 +149,14 @@
 		<div>
 		[page:String url] — the url to load<br /><br />
 
-		This should be called by any loader used by the manager when the loader starts loading an url.
+		This should be called by any loader using the manager when the loader starts loading an url.
 		</div>
 
 		<h3>[method:null itemEnd]( [page:String url] )</h3>
 		<div>
 		[page:String url] — the loaded url<br /><br />
 
-		This should be called by any loader used by the manager when the loader ended loading an url.
+		This should be called by any loader using the manager when the loader ended loading an url.
 		</div>
 
 
@@ -145,7 +164,7 @@
 		<div>
 		[page:String url] — the loaded url<br /><br />
 
-		This should be called by any loader used by the manager when the loader errors loading an url.
+		This should be called by any loader using the manager when the loader errors loading an url.
 		</div>
 
 		<h2>Source</h2>

+ 1 - 1
docs/api/math/Box3.html

@@ -244,7 +244,7 @@
 		<h3>[method:Box3 setFromCenterAndSize]( [page:Vector3 center], [page:Vector3 size] )</h3>
 		<div>
 		[page:Vector3 center] - Desired center position of the box ([page:Vector3]). <br>
-		[page:Vector3 size] - Desired x and y dimensions of the box ([page:Vector3]).<br /><br />
+		[page:Vector3 size] - Desired x, y and z dimensions of the box ([page:Vector3]).<br /><br />
 
 		Centers this box on [page:Vector3 center] and sets this box's width and height to the values specified
 		in [page:Vector3 size].

+ 1 - 1
docs/api/math/Frustum.html

@@ -98,7 +98,7 @@
 		<div>
 			[page:Matrix4 matrix] - [page:Matrix4] used to set the [page:.planes planes]<br /><br />
 
-			This is used by the [page:WebGLRenderer] to set up the Frustum from a [page:Camera Camera's]
+			This is used by the [page:WebGLRenderer] to set up the Frustum from a [page:Camera Camera]'s
 			[page:Camera.projectionMatrix projectionMatrix] and [page:Camera.matrixWorldInverse matrixWorldInverse].
 		</div>
 

+ 4 - 4
docs/api/math/Math.html

@@ -70,11 +70,11 @@
 		Linear mapping of [page:Float x] from range [[page:Float a1], [page:Float a2]] to range [[page:Float b1], [page:Float b2]].
 		</div>
 
-		<h3>[method:Integer nearestPowerOfTwo]( [page:Number n] )</h3>
-		<div>	Returns the nearest power of 2 to a given number [page:Number n].</div>
+		<h3>[method:Integer ceilPowerOfTwo]( [page:Number n] )</h3>
+		<div>Returns the smallest power of 2 that is greater than or equal to [page:Number n].</div>
 
-		<h3>[method:Integer nextPowerOfTwo]( [page:Number n] )</h3>
-		<div>Returns the nearest power of 2 that is bigger than [page:Number n].</div>
+		<h3>[method:Integer floorPowerOfTwo]( [page:Number n] )</h3>
+		<div>Returns the largest power of 2 that is less than or equal to [page:Number n].</div>
 
 		<h3>[method:Float radToDeg]( [page:Float radians] )</h3>
 		<div>Converts radians to degrees.</div>

+ 17 - 0
docs/api/math/Matrix3.html

@@ -169,6 +169,23 @@ m.elements = [ 11, 21, 31,
 		<h3>[method:Matrix3 setFromMatrix4]( [page:Matrix4 m] )</h3>
 		<div>Set this matrx to the upper 3x3 matrix of the Matrix4 [page:Matrix4 m].</div>
 
+		<h3>
+			[method:Matrix3 setUvTransform](
+			[page:Float tx], [page:Float ty], [page:Float sx], [page:Float sy],
+			[page:Float rotation], [page:Float cx], [page:Float cy] )
+		</h3>
+		<div>
+		[page:Float tx] - offset x<br />
+		[page:Float ty] - offset y<br />
+		[page:Float sx] - repeat x<br />
+		[page:Float sy] - repeat y<br />
+		[page:Float rotation] - rotation (in radians)<br />
+		[page:Float cx] - center x of rotation<br />
+		[page:Float cy] - center y of rotation<br /><br />
+
+		Sets the UV transform matrix from offset, repeat, rotation, and center.
+		</div>
+
 		<h3>[method:Array toArray]( [page:Array array], [page:Integer offset] )</h3>
 		<div>
 		[page:Array array] - (optional) array to store the resulting vector in. If not given a new array will be created.<br />

+ 7 - 2
docs/api/math/Vector2.html

@@ -97,6 +97,11 @@
 		Computes the angle in radians of this vector with respect to the positive x-axis.
 		</div>
 
+		<h3>[method:Vector2 applyMatrix3]( [page:Matrix3 m] )</h3>
+		<div>
+		Multiplies this vector (with an implicit 1 as the 3rd component) by m.
+		</div>
+
 		<h3>[method:Vector2 ceil]()</h3>
 		<div>
 		The [page:.x x] and [page:.y y] components of the vector are rounded up to the nearest integer value.
@@ -143,7 +148,7 @@
 		<h3>[method:Float distanceTo]( [page:Vector2 v] )</h3>
 		<div>Computes the distance from this vector to [page:Vector2 v].</div>
 
-		<h3>[method:Float distanceToManhattan]( [page:Vector2 v] )</h3>
+		<h3>[method:Float manhattanDistanceTo]( [page:Vector2 v] )</h3>
 		<div>
 		Computes the [link:https://en.wikipedia.org/wiki/Taxicab_geometry Manhattan distance] from this vector to [page:Vector2 v].
 		</div>
@@ -204,7 +209,7 @@
 		<div>Computes the [link:https://en.wikipedia.org/wiki/Euclidean_distance Euclidean length]
 		(straight-line length) from (0, 0) to (x, y).</div>
 
-		<h3>[method:Float lengthManhattan]()</h3>
+		<h3>[method:Float manhattanLength]()</h3>
 		<div>
 		Computes the [link:http://en.wikipedia.org/wiki/Taxicab_geometry Manhattan length] of this vector.
 		</div>

+ 2 - 2
docs/api/math/Vector3.html

@@ -178,7 +178,7 @@ var d = a.distanceTo( b );
 		<h3>[method:Float distanceTo]( [page:Vector3 v] )</h3>
 		<div>Computes the distance from this vector to [page:Vector3 v].</div>
 
-		<h3>[method:Float distanceToManhattan]( [page:Vector3 v] )</h3>
+		<h3>[method:Float manhattanDistanceTo]( [page:Vector3 v] )</h3>
 		<div>
 		Computes the [link:https://en.wikipedia.org/wiki/Taxicab_geometry Manhattan distance] from this vector to [page:Vector3 v].
 		</div>
@@ -241,7 +241,7 @@ var d = a.distanceTo( b );
 		<div>Computes the [link:https://en.wikipedia.org/wiki/Euclidean_distance Euclidean length]
 		(straight-line length) from (0, 0, 0) to (x, y, z).</div>
 
-		<h3>[method:Float lengthManhattan]()</h3>
+		<h3>[method:Float manhattanLength]()</h3>
 		<div>
 		Computes the [link:http://en.wikipedia.org/wiki/Taxicab_geometry Manhattan length] of this vector.
 		</div>

+ 3 - 3
docs/api/math/Vector4.html

@@ -188,7 +188,7 @@ var d = a.dot( b );
 		<div>Computes the [link:https://en.wikipedia.org/wiki/Euclidean_distance Euclidean length]
 		(straight-line length) from (0, 0, 0, 0) to (x, y, z, w).</div>
 
-		<h3>[method:Float lengthManhattan]()</h3>
+		<h3>[method:Float manhattanLength]()</h3>
 		<div>
 		Computes the [link:http://en.wikipedia.org/wiki/Taxicab_geometry Manhattan length] of this vector.
 		</div>
@@ -231,13 +231,13 @@ var d = a.dot( b );
 
 		<h3>[method:Vector4 max]( [page:Vector4 v] )</h3>
 		<div>
-		If this vector's x, y, z or w value is less than [page:Vector4 v's] x, y, z or w value, replace
+		If this vector's x, y, z or w value is less than [page:Vector4 v]'s x, y, z or w value, replace
 		that value with the corresponding max value.
 		</div>
 
 		<h3>[method:Vector4 min]( [page:Vector4 v] )</h3>
 		<div>
-		If this vector's x, y, z or w value is greater than [page:Vector4 v's] x, y, z or w value, replace
+		If this vector's x, y, z or w value is greater than [page:Vector4 v]'s x, y, z or w value, replace
 		that value with the corresponding min value.
 		</div>
 

+ 0 - 6
docs/api/objects/SkinnedMesh.html

@@ -97,12 +97,6 @@
 		The base matrix that is used for resetting the bound bone transforms.
 		</div>
 
-		<h3>[property:array bones]</h3>
-		<div>
-		This contains the array of [page:Bone bones] for this mesh. These should be set in
-		the constructor.
-		</div>
-
 		<h3>[property:Boolean isSkinnedMesh]</h3>
 		<div>
 			Used to check whether this or derived classes are skinned meshes. Default is *true*.<br /><br />

+ 8 - 0
docs/api/renderers/WebGLRenderer.html

@@ -225,6 +225,14 @@
 		<h3>[property:Boolean shadowMap.enabled]</h3>
 		<div>If set, use shadow maps in the scene. Default is *false*.</div>
 
+		<h3>[property:Boolean shadowMap.autoUpdate]</h3>
+		<div>Enables automatic updates to the shadows in the scene. Default is *true*.</div>
+		<div>If you do not require dynamic lighting / shadows, you may set this to *false* when the renderer is instantiated.</div>
+
+		<h3>[property:Boolean shadowMap.needsUpdate]</h3>
+		<div>When set to *true*, shadow maps in the scene will be updated in the next *render* call. Default is *false*. </div>
+		<div>If you have disabled automatic updates to shadow maps (*shadowMap.autoUpdate = false*), you will need to set this to *true* and then make a render call to update the shadows in your scene.</div>
+
 		<h3>[property:Integer shadowMap.type]</h3>
 		<div>Defines shadow map type (unfiltered, percentage close filtering, percentage close filtering with bilinear filtering in shader)</div>
 		<div>Options are THREE.BasicShadowMap, THREE.PCFShadowMap (default), THREE.PCFSoftShadowMap. See [page:WebGLRenderer WebGLRenderer constants] for details.</div>

+ 26 - 1
docs/api/textures/Texture.html

@@ -114,7 +114,7 @@
 		<h3>[property:number format]</h3>
 		<div>
 		The default is [page:Textures THREE.RGBAFormat], although the [page:TextureLoader TextureLoader] will automatically
-		et this to [page:Textures THREE.RGBFormat] for JPG images. <br /><br />
+		set this to [page:Textures THREE.RGBFormat] for JPG images. <br /><br />
 
 		See the [page:Textures texture constants] page for details of other formats.
 		</div>
@@ -147,6 +147,31 @@
 		assigned to achieve the desired repetiton.
 		</div>
 
+		<h3>[property:number rotation]</h3>
+		<div>
+		How much the texture is rotated around the center point, in radians. Postive values are counter-clockwise. Default is *0*.
+		</div>
+
+		<h3>[property:Vector2 center]</h3>
+		<div>
+		Indicates where the center of rotation is. To rotate around the center point set this value to (0.5, 0.5). Default value is (0.0, 0.0).
+		</div>
+
+		<h3>[property:boolean matrixAutoUpdate]</h3>
+		<div>
+		Whether to update the texture's uv-transform [property:Matrix3 matrix] based on the [property:Vector2 offset],
+		[property:Vector2 repeat], and [property:number rotation] settings. True by default.
+		Set this to false if you are specifying the uv-transform matrix directly.
+		</div>
+
+		<h3>[property:Matrix3 matrix]</h3>
+		<div>
+		The uv-transform matrix for the texture. Updated by the renderer from the texture properties [property:Vector2 offset], [property:Vector2 repeat],
+		and [property:number rotation] when the texture's [property:boolean matrixAutoUpdate] property is true.
+		When [property:boolean matrixAutoUpdate] property is false, this matrix may be set manually.
+		Default is the indentity matrix.
+		</div>
+
 		<h3>[property:boolean generateMipmaps]</h3>
 		<div>
 		Whether to generate mipmaps (if possible) for a texture. True by default. Set this to false if you are

+ 0 - 234
docs/examples/cameras/CombinedCamera.html

@@ -1,234 +0,0 @@
-<!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:Camera] &rarr;
-
-		<h1>[name]</h1>
-
-		<div class="desc">A general purpose camera, for setting FOV, Lens Focal Length,
- 		and switching between perspective and orthographic views easily.
- 		Use this only if you do not wish to manage
- 		both an Orthographic and Perspective Camera</div>
-
-		<h2>Examples</h2>
-
-		<div>[example:canvas_camera_orthographic2 camera / orthographic2 ]</div>
-
-		<code>//Create combined camera
-		camera = new THREE.CombinedCamera( window.innerWidth / 2, window.innerHeight / 2, 70, 1, 1000, - 500, 1000 );
-		</code>
-
-		<h2>Constructor</h2>
-
-
-		<h3>[name]([page:Number width], [page:Number height], [page:Number fov], [page:Number near], [page:Number far], [page:Number orthoNear], [page:Number orthoFar])</h3>
-		<div>
-		width -- Camera frustum width.<br />
-		height -- Camera frustum height.<br />
-		fov — Camera frustum vertical field of view in perspective view.<br />
-		near — Camera frustum near plane in perspective view.<br />
-		far — Camera frustum far plane in perspective view.<br />
-		orthoNear — Camera frustum near plane in orthographic view.<br />
-		orthoFar — Camera frustum far plane in orthographic view.
-		</div>
-		<div>
-		Creates a [name]. This initializes 2 cameras, an OrthographicCamera and a PerspectiveCamera. The default is the perspective Camera.
-		</div>
-
-
-		<h2>Properties</h2>
-
-
-
-		<h3>[property:Number fov]</h3>
-		<div>
-		Gets or sets the camera frustum vertical field of view in perspective view.
-		</div>
-
-		<h3>[property:Float aspect]</h3>
-		<div>Camera frustum aspect ratio, usually the canvas width / canvas height.</div>
-
-		<h3>[property:number left]</h3>
-		<div>
-		Gets or sets the camera frustum left plane in orthographic view.
-		</div>
-
-		<h3>[property:Number right]</h3>
-		<div>
-		Gets or sets the camera frustum right plane in orthographic view.
-		</div>
-
-		<h3>[property:number top]</h3>
-		<div>
-		Gets or sets the camera frustum top plane in orthographic view.
-		</div>
-
-		<h3>[property:Number bottom]</h3>
-		<div>
-		Gets or sets the camera frustum bottom plane in orthographic view.
-		</div>
-
-		<h3>[property:number zoom]</h3>
-		<div>
-		Gets or sets the zoom factor of the camera.
-		</div>
-
-		<h3>[property:number near]</h3>
-		<div>
-		Gets camera frustum near plane.
-		</div>
-
-		<h3>[property:number far]</h3>
-		<div>
-		Gets camera frustum far plane.
-		</div>
-
-		<h3>[property:Object view]</h3>
-		<div>
-			Frustum window specification or null.
-			This is set using the [page:CombinedCamera.setViewOffset .setViewOffset] method
-			and cleared using [page:CombinedCamera.clearViewOffset .clearViewOffset].
-		</div>
-
-		<h3>[property:Matrix4 projectionMatrix]</h3>
-		<div>
-		This is the matrix which contains the projection.
-		</div>
-
-		<h3>[property:OrthographicCamera cameraO]</h3>
-		<div>
-		Gets or sets the internal OrthographicCamera used as camera.
-		</div>
-
-		<h3>[property:PerspectiveCamera cameraP]</h3>
-		<div>
-		Gets or sets the internal PerspectiveCamera used as camera.
-		</div>
-
-		<h3>[property:boolean inOrthographicMode]</h3>
-		<div>
-		Gets whether the combinedCamera is in Orthographic Mode.
-		</div>
-
-		<h3>[property:boolean inPerspectiveMode]</h3>
-		<div>
-		Gets whether the combinedCamera is in Perspective Mode.
-		</div>
-
-		<h2>Methods</h2>
-
-		<h3>[method:null setFov]([page:Number fov])</h3>
-		<div>
-		fov --  Camera frustum vertical field of view in perspective view.
-		</div>
-		<div>
-		sets the camera frustum vertical field of view in perspective view.
-		</div>
-
-		<h3>[method:null setZoom]([page:Number zoom])</h3>
-		<div>
-		zoom -- The zoom factor.
-		</div>
-		<div>
-		Sets the zoomfactor.
-		</div>
-
-		<h3>[method:null setLens]([page:number focalLength], [page:Number filmGauge])</h3>
-		<div>
-		focalLength -- The focal length of a lens is defined as the distance from the optical center of a lens (or, the secondary principal point for a complex lens like a camera lens) to the focal point (sensor) when the lens is focused on an object at infinity. <br />
-		filmGauge -- the size of the frame in mm. (default is *35*)
-		</div>
-		<div>
-		Sets the fov based on lens data.
-		</div>
-
-		<h3>[method:null toFrontView]()</h3>
-		<div>
-		Sets the camera to view the front of the target.
-		</div>
-
-		<h3>[method:null toBackView]()</h3>
-		<div>
-		Sets the camera to view the back of the target.
-		</div>
-
-		<h3>[method:null toLeftView]()</h3>
-		<div>
-		Sets the camera to view the left of the target.
-		</div>
-
-		<h3>[method:null toRightView]()</h3>
-		<div>
-		Sets the camera to view the right of the target.
-		</div>
-
-		<h3>[method:null toTopView]()</h3>
-		<div>
-		Sets the camera to view the top.
-		</div>
-
-		<h3>[method:null toBottomView]()</h3>
-		<div>
-		Sets the camera to view the bottom.
-		</div>
-
-		<h3>[method:null setSize]([page:Number width], [page:Number height])</h3>
-		<div>
-		width -- The width of the orthographic view.<br />
-		height -- The height of the orthographic view.
-		</div>
-		<div>
-		Sets the size of the orthographic view.
-		</div>
-
-		<h3>[method:null toOrthographic]()</h3>
-		<div>
-		Change the camera to orthographic view.
-		</div>
-
-		<h3>[method:null toPerspective]()</h3>
-		<div>
-		Change the camera to Perspective view.
-		</div>
-
-		<h3>[method:null updateProjectionMatrix]()</h3>
-		<div>
-		Updates the ProjectionMatrix.
-		</div>
-
-		<h3>[method:Camera copy]( [page:Camera source] )</h3>
-		<div>
-		Copy the properties from the source camera into this one.
-		</div>
-
-		<h3>[method:null setViewOffset]( [page:Float fullWidth], [page:Float fullHeight], [page:Float x], [page:Float y], [page:Float width], [page:Float height] )</h3>
-		<div>
-		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].
-		</div>
-
-
-		<h3>[method:null clearViewOffset]()</h3>
-		<div>
-		Removes any offset set by the .setViewOffset method.
-		</div>
-		<h2>Source</h2>
-
-		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/cameras/CombinedCamera.js examples/cameras/CombinedCamera.js]
-	</body>
-</html>

+ 274 - 0
docs/examples/controls/OrbitControls.html

@@ -0,0 +1,274 @@
+<!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">
+      Orbit controls allow the camera to orbit around a target.<br>
+
+      To use this, as with all files in the /examples directory, you will have to
+      include the file seperately in your HTML.
+
+		</div>
+
+
+		<h2>Example</h2>
+
+		<div>[example:misc_controls_orbit misc / controls / orbit ]</div>
+
+		<code>
+var renderer = new THREE.WebGLRenderer();
+renderer.setSize( window.innerWidth, window.innerHeight );
+document.body.appendChild( renderer.domElement );
+
+var scene = new THREE.Scene();
+
+var  camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 10000 );
+
+var controls = new THREE.OrbitControls( camera );
+
+//controls.update() must be called after any manual changes to the camera's transform
+camera.position.set( 0, 20, 100 );
+controls.update();
+
+function animate() {
+
+  requestAnimationFrame( animate );
+
+  // required if controls.enableDamping or controls.autoRotate are set to true
+  controls.update();
+
+  renderer.render( scene, camera );
+
+}
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( [page:Camera object], [page:HTMLDOMElement domElement] )</h3>
+		<div>
+      [page:Camera object]: (required) The camera to be controlled.<br><br>
+
+      [page:HTMLDOMElement domElement]: (optional) The HTML element used for event listeners. By default this is the whole document,
+      however if you only want to the controls to work over a specific element (e.g. the canvas) you can specify that here.
+		</div>
+
+
+    <h2>Properties</h2>
+
+    <h3>[property:Boolean autoRotate]</h3>
+    <div>
+      Set to true to automatically rotate around the target.<br> Note that if this is enabled, you must call [page:.update]
+      () in your animation loop.
+    </div>
+
+    <h3>[property:Float autoRotateSpeed]</h3>
+    <div>
+      How fast to rotate around the target if [property:Boolean autoRotate] is true. Default is 2.0, which equates to 30 seconds
+      per rotation at 60fps.<br> Note that if [property:Boolean autoRotate] is enabled, you must call [page:.update]
+      () in your animation loop.
+    </div>
+
+    <h3>
+      [property:Float dampingFactor]</h3>
+    <div>
+      The damping inertia used if [property:Boolean enableDamping] is set to true.<br> Note that for this to work, you must
+      call [page:.update] () in your animation loop.
+    </div>
+
+    <h3>[property:HTMLDOMElement domElement]</h3>
+    <div>
+      The HTMLDOMElement used to listen for mouse / touch events. This must be passed in the constructor; changing it here will
+      not set up new event listeners. Default is the whole document.
+    </div>
+
+    <h3>[property:Boolean enabled]</h3>
+    <div>
+      Whether or not the controls are enabled.
+    </div>
+
+    <h3>[property:Boolean enableDamping]</h3>
+    <div>
+      Set to true to enable damping (inertia), which can be used to give a sense of weight to the controls. Default is false.<br>          Note that if this is enabled, you must call [page:.update] () in your animation loop.
+    </div>
+
+    <h3>[property:Boolean enableKeys]</h3>
+    <div>
+      Enable or disable the use of keyboard controls.
+    </div>
+
+    <h3>[property:Boolean enablePan]</h3>
+    <div>
+      Enable or disable camera panning. Default is true.
+    </div>
+
+    <h3>[property:Boolean enableRotate]</h3>
+    <div>
+      Enable or disable horizontal and vertical rotation of the camera. Default is true.<br>
+      Note that it is possible to disable a single axis by setting the min and max of the
+      [page:.minPolarAngle polar angle] or [page:.minAzimuthAngle azimuth angle] to the same value,
+      which will cause the vertical or horizontal rotation to be fixed at that value.
+    </div>
+
+    <h3>[property:Boolean enableZoom]</h3>
+    <div>
+      Enable or disable zooming (dollying) of the camera.
+    </div>
+
+    <h3>[property:Float keyPanSpeed]</h3>
+    <div>
+      How fast to pan the camera when the keyboard is used. Default is 7.0 pixels per keypress.
+    </div>
+
+    <h3>[property:Object keys]</h3>
+    <div>
+      This object contains references to the keycodes for controlling camera panning. Default is the 4 arrow keys.
+      <code>
+controls.keys = {
+  LEFT: 37, //left arrow
+  UP: 38, // up arrow
+  RIGHT: 39, // right arrow
+  BOTTOM: 40 // down arrow
+}
+       </code> See [link:https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode this page] for a full
+      list of keycodes.
+    </div>
+
+    <h3>[property:Float maxAzimuthAngle]</h3>
+    <div>
+      How far you can orbit horizontally, upper limit. Range is - Math.PI to Math.PI ( or Infinity for no limit ) and default is
+      Infinity;
+    </div>
+
+    <h3>[property:Float maxDistance]</h3>
+    <div>
+      How far you can dolly out ( [page:PerspectiveCamera] only ). Default is Infinity.
+    </div>
+
+    <h3>[property:Float maxPolarAngle]</h3>
+    <div>
+      How far you can orbit vertically, upper limit. Range is 0 to Math.PI radians, and default is Math.PI.
+    </div>
+
+    <h3>[property:Float maxZoom]</h3>
+    <div>
+      How far you can zoom out ( [page:OrthographicCamera] only ). Default is Infinity.
+    </div>
+
+    <h3>[property:Float minAzimuthAngle]</h3>
+    <div>
+      How far you can orbit horizontally, lower limit. Range is - Math.PI to Math.PI ( or - Infinity for no limit ) and default
+      is - Infinity;
+    </div>
+
+    <h3>[property:Float minDistance]</h3>
+    <div>
+       How far you can dolly in ( [page:PerspectiveCamera] only ). Default is 0.
+    </div>
+
+    <h3>[property:Float minPolarAngle]</h3>
+    <div>
+      How far you can orbit vertically, lower limit. Range is 0 to Math.PI radians, and default is 0.
+    </div>
+
+    <h3>[property:Float minZoom]</h3>
+    <div>
+      How far you can zoom in ( [page:OrthographicCamera] only ). Default is 0.
+    </div>
+
+    <h3>
+      [property:Object mouseButtons]</h3>
+    <div>
+      This object contains references to the mouse buttons used for the controls.
+      <code>
+controls.mouseButtons = {
+  ORBIT: THREE.MOUSE.LEFT,
+  ZOOM: THREE.MOUSE.MIDDLE,
+  PAN: THREE.MOUSE.RIGHT
+}
+      </code>
+    </div>
+
+    <h3>[property:Camera object]</h3>
+    <div>
+      The camera ( or other object ) that is being controlled.
+    </div>
+
+    <h3>[property:Vector3 position0]</h3>
+    <div>
+      Used internally by the [method:saveState] and [method:reset] methods.
+    </div>
+
+    <h3>[property:Float rotateSpeed]</h3>
+    <div>
+      Speed of rotation. Default is 1.
+    </div>
+
+    <h3>[property:Vector3 target0]</h3>
+    <div>
+      Used internally by the [method:saveState] and [method:reset] methods.
+    </div>
+
+    <h3>[property:Vector3 target]</h3>
+    <div>
+      The focus point of the controls, the [page:.object] orbits around this. It can be updated manually at any point to change
+      the focus of the controls.
+    </div>
+
+    <h3>[property:Float zoom0]</h3>
+    <div>
+      Used internally by the [method:saveState] and [method:reset] methods.
+    </div>
+
+    <h3>[property:Float zoomSpeed]</h3>
+    <div>
+      Speed of zooming / dollying. Default is 1.
+    </div>
+
+
+
+		<h2>Methods</h2>
+
+    <h3>[method:null dispose] ()</h3>
+    <div>
+      Remove all the event listeners.
+    </div>
+
+    <h3>[method:radians getAzimuthalAngle] ()</h3>
+    <div>
+      Get the current horizontal rotation, in radians.
+    </div>
+
+		<h3>[method:radians getPolarAngle] ()</h3>
+		<div>
+      Get the current vertical rotation, in radians.
+    </div>
+
+    <h3>[method:null reset] ()</h3>
+    <div>
+      Reset the controls to their state from either the last time the [page:.saveState] was called, or the initial state.
+    </div>
+
+    <h3>[method:null saveState] ()</h3>
+    <div>
+      Save the current state of the controls. This can later be recovered with [page:.reset].
+    </div>
+
+    <h3>[method:false update] ()</h3>
+    <div>
+      Update the controls. Must be called after any manual changes to the camera's transform,
+      or in the update loop if [page:.autoRotate] or [page:.enableDamping] are set.
+    </div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/[path].js examples/js/[path].js]
+	</body>
+</html>

+ 92 - 0
docs/examples/exporters/GLTFExporter.html

@@ -0,0 +1,92 @@
+<!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">
+		An exporter for *glTF* 2.0.
+		<br /><br />
+		<a href="https://www.khronos.org/gltf">glTF</a> (GL Transmission Format) is an
+		<a href="https://github.com/KhronosGroup/glTF/tree/master/specification/2.0">open format specification</a>
+		for efficient delivery and loading of 3D content. Assets may be provided either in JSON (.gltf)
+		or binary (.glb) format. External files store textures (.jpg, .png, ...) and additional binary
+		data (.bin). A glTF asset may deliver one or more scenes, including meshes, materials,
+		textures, skins, skeletons, morph targets, animations, lights, and/or cameras.
+		</div>
+
+		<h2>Example</h2>
+
+		<code>
+		// Instantiate a exporter
+		var exporter = new THREE.GLTFExporter( defaultOptions );
+
+		// Parse the input and generate the glTF output
+		exporter.parse( scene, function ( gltf ) {
+			console.log( gltf );
+			downloadJSON( gltf );
+		}, options );
+		</code>
+
+		[example:misc_exporter_gltf]
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( )</h3>
+		<div>
+		</div>
+		<div>
+		Creates a new [name].
+		</div>
+
+		<h2>Methods</h2>
+
+		<h3>[method:null parse]( [page:Object input], [page:Function onCompleted], [page:Object options] )</h3>
+		<div>
+		[page:Object input] — Scenes or objects to export. Valid options:<br />
+		<ul>
+			<li>
+				Export scenes
+				<code>
+					exporter.parse( scene1, ...)
+exporter.parse( [ scene1, scene2 ], ...)
+				</code>
+			</li>
+			<li>
+			Export objects (It will create a new Scene to hold all the objects)
+			<code>
+				exporter.parse( object1, ...)
+exporter.parse( [ object1, object2 ], ...)
+			</code>
+			</li>
+			<li>
+			Mix scenes and objects (It will export the scenes as usual but it will create a new scene to hold all the single objects).
+			<code>
+exporter.parse( [ scene1, object1, object2, scene2 ], ...)
+			</code>
+		</ul>
+
+		[page:Function onCompleted] — Will be called when the export completes. The argument will be the generated glTF JSON or binary ArrayBuffer.<br />
+		[page:Options options] - Export options<br />
+		<ul>
+			<li>trs - bool. Export position, rotation and scale instead of matrix per node. Default is false</li>
+			<li>onlyVisible - bool. Export only visible objects. Default is true.</li>
+			<li>truncateDrawRange - bool. Export just the attributes within the drawRange, if defined, instead of exporting the whole array. Default is true.</li>
+			<li>binary - bool. Export in binary (.glb) format, returning an ArrayBuffer. Default is false.</li>
+		</ul>
+		</div>
+		<div>
+		Generates a .gltf (JSON) or .glb (binary) output from the input (Scene or Objects)
+		</div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/exporters/GLTFExporter.js examples/js/exporters/GLTFExporter.js]
+	</body>
+</html>

+ 2 - 0
docs/examples/geometries/ConvexBufferGeometry.html

@@ -34,6 +34,8 @@
 
 		<h2>Example</h2>
 
+		<div>[example:webgl_geometry_convex geometry / convex ]</div>
+
 		<code>var geometry = new THREE.ConvexBufferGeometry( points );
 		var material = new THREE.MeshBasicMaterial( {color: 0x00ff00} );
 		var mesh = new THREE.Mesh( geometry, material );

+ 2 - 0
docs/examples/geometries/ConvexGeometry.html

@@ -33,6 +33,8 @@
 
 		<h2>Example</h2>
 
+		<div>[example:webgl_geometry_convex geometry / convex ]</div>
+
 		<code>var geometry = new THREE.ConvexGeometry( points );
 		var material = new THREE.MeshBasicMaterial( {color: 0x00ff00} );
 		var mesh = new THREE.Mesh( geometry, material );

+ 57 - 0
docs/examples/geometries/DecalGeometry.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>
+		[page:BufferGeometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<div class="desc">[name] can be used to create a decal mesh that serves different kinds of purposes e.g. adding unique details to models, performing dynamic visual environmental changes or covering seams.</div>
+
+		<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>
+
+		<div>[example:webgl_decals decals ]</div>
+
+		<code>var geometry =  new THREE.DecalGeometry( mesh, position, orientation, size );
+		var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
+		var mesh = new THREE.Mesh( geometry, material );
+		scene.add( mesh );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( [page:Mesh mesh], [page:Vector3 position], [page:Euler orientation], [page:Vector3 size] )</h3>
+		<div>
+		mesh — Any mesh object.<br />
+		position — Position of the decal projector.<br />
+		orientation — Orientation of the decal projector.<br />
+		size — Size of the decal projector.
+		</div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/geometries/DecalGeometry.js examples/js/geometries/DecalGeometry.js]
+	</body>
+</html>

+ 18 - 10
docs/examples/loaders/BabylonLoader.html

@@ -8,10 +8,12 @@
 		<link type="text/css" rel="stylesheet" href="page.css" />
 	</head>
 	<body>
-
 		<h1>[name]</h1>
 
-		<div class="desc">A loader for loading a <em>.babylon</em> resource.</div>
+		<div class="desc">A loader for loading a <em>.babylon</em> resource. <br />
+		The <a href="https://doc.babylonjs.com/generals/file_format_map_(.babylon)"> .babylon </a> file format used by
+		<a href="https://www.babylonjs.com/">Babylon.js</a>.
+		</div>
 
 		<h2>Example</h2>
 
@@ -23,17 +25,23 @@
 		loader.load(
 			// resource URL
 			'models/babylon/skull.babylon',
-			// Function when resource is loaded
+			// called when resource is loaded
 			function ( object ) {
+
 				scene.add( object );
+
 			},
-			// Function called when download progresses
+			// called when loading is in progress
 			function ( xhr ) {
-				console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
+
+				console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
+
 			},
-			// Function called when download errors
+			// called when loading has errors
 			function ( xhr ) {
+
 				console.log( 'An error happened' );
+
 			}
 		);
 		</code>
@@ -57,10 +65,10 @@
 
 		<h3>[method:null load]( [page:String url], [page:Function onLoad], [page:Function onProgress], [page:Function onError] )</h3>
 		<div>
-		[page:String url] — required<br />
-		[page:function onLoad] — Will be called when load completes. The argument will be the loaded [page:Object3D].<br />
-		[page:function onProgress] — Will be called while load progresses. The argument will be the XMLHttpRequest instance, which contains .[page:Integer total] and .[page:Integer loaded] bytes.<br />
-		[page:function onError] — Will be called when load errors.<br />
+		[page:String url] — A string containing the path/URL of the <em>.babylon</em> file.<br />
+		[page:function onLoad] — (optional) A function to be called after loading is successfully completed. The function receives the loaded [page:Object3D] as an argument.<br />
+		[page:function onProgress] — (optional) A function to be called while the loading is in progress. The argument will be the XMLHttpRequest instance, which contains [page:Integer total] and [page:Integer loaded] bytes.<br />
+		[page:function onError] — (optional) A function to be called if an error occurs during loading. The function receives the error as an argument.<br />
 		</div>
 		<div>
 		Begin loading from url and call onLoad with the parsed response content.

+ 0 - 103
docs/examples/loaders/ColladaLoader.html

@@ -1,103 +0,0 @@
-<!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">A loader for <em>Collada</em> files.</div>
-
-		<h2>Example</h2>
-
-		<code>
-		// instantiate a loader
-		var loader = new THREE.ColladaLoader();
-
-		loader.load(
-			// resource URL
-			'models/collada/monster/monster.dae',
-			// Function when resource is loaded
-			function ( collada ) {
-				scene.add( collada.scene );
-			},
-			// Function called when download progresses
-			function ( xhr ) {
-				console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
-			}
-		);
-		</code>
-
-		[example:webgl_loader_collada]<br />
-		[example:webgl_loader_collada_keyframe]<br />
-		[example:webgl_loader_collada_skinning]<br />
-		[example:webgl_loader_collada_kinematics]
-
-
-		<h2>Constructor</h2>
-
-		<h3>[name]()</h3>
-		<div>
-		Creates a new [name].
-		</div>
-
-
-		<h2>Properties</h2>
-
-		<h3>[property:Array options]</h3>
-		<div>
-		&nbsp;.[page:Boolean centerGeometry] — Force [page:Geometry] to always be centered at the local origin of the containing [page: Mesh].<br />
-		&nbsp;.[page:Boolean convertUpAxis] — Axis conversion is done for geometries, animations, and controllers.<br />
-		&nbsp;.[page:Boolean subdivideFaces] — Force subdivision into multiple [page: Face3].<br />
-		&nbsp;.[page:String upAxis] — X, Y or Z<br />
-		&nbsp;.[page:Boolean defaultEnvMap] — Cubemap to use for reflective or refractive materials.<br />
-		</div>
-
-		<h3>[property:Object geometries]</h3>
-		<div>
-		Parsed <em>.dae</em> geometries.
-		</div>
-
-
-		<h2>Methods</h2>
-
-		<h3>[method:null load]( [page:String url], [page:Function onLoad], [page:Function onProgress] )</h3>
-		<div>
-		[page:String url] — required<br />
-		[page:function onLoad] — Will be called when load completes. The argument will be an [page:Object object] containing loaded resources.<br />
-		[page:function onProgress] — Will be called while load progresses. The argument will be an object containing .[page:Integer total] and .[page:Integer loaded] bytes.<br />
-		</div>
-		<div>
-		Begin loading from url and call onLoad with the parsed response content.
-		</div>
-
-		<h3>[method:Object parse]( [page:Document doc], [page:Function callBack], [page:String url] )</h3>
-		<div>
-		[page:Document doc] — The <em>XML</em> document to parse.<br />
-		[page:Function callBack] — Will be called when parse completes.<br />
-		[page:String url] — The base url from which to find subsequent resources.<br />
-		</div>
-		<div>
-		Parse an <em>XML Document</em> and return an [page:Object object] that contain loaded parts: .[page:Scene scene], .[page:Array morphs], .[page:Array skins], .[page:Array animations], .[page:Object dae]
-		</div>
-
-		<h3>[method:null applySkin]( [page:Geometry geometry], [page:Object instanceCtrl], [page:Integer frame] )</h3>
-		<div>
-		[page:Geometry geometry] — required<br />
-		[page:Object instanceCtrl] — required. A collada <em>skinController</em><br />
-		[page:Integer frame] — optionnal. Default is 40<br />
-		</div>
-		<div>
-		Apply a skin (vertices, animation, bones) from a <em>collada skin controller</em>, on the given [page:Geometry].
-		</div>
-
-		<h2>Source</h2>
-
-		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/loaders/ColladaLoader.js examples/js/loaders/ColladaLoader.js]
-	</body>
-</html>

+ 42 - 24
docs/examples/loaders/GLTFLoader.html

@@ -11,9 +11,7 @@
 		[page:Loader] &rarr;
 		<h1>[name]</h1>
 
-		<div class="desc">
-		A loader for *glTF* 2.0 resources.
-		<br /><br />
+		<div class="desc"> A loader for loading <em>glTF 2.0</em> resource. <br />
 		<a href="https://www.khronos.org/gltf">glTF</a> (GL Transmission Format) is an
 		<a href="https://github.com/KhronosGroup/glTF/tree/master/specification/2.0">open format specification</a>
 		for efficient delivery and loading of 3D content. Assets may be provided either in JSON (.gltf)
@@ -48,19 +46,38 @@
 		<h2>Example</h2>
 
 		<code>
-		// Instantiate a loader
-		var loader = new THREE.GLTFLoader();
-
-		// Load a glTF resource
-		loader.load( 'models/gltf/duck/duck.gltf', function ( gltf ) {
-			scene.add( gltf.scene );
-
-			gltf.animations; // Array&lt;THREE.AnimationClip&gt;
-			gltf.scene;      // THREE.Scene
-			gltf.scenes;     // Array&lt;THREE.Scene&gt;
-			gltf.cameras;    // Array&lt;THREE.Camera&gt;
-		} );
-		</code>
+			// Instantiate a loader
+			var loader = new THREE.GLTFLoader();
+	
+			// Load a glTF resource
+			loader.load(
+				// resource URL
+				'models/gltf/duck/duck.gltf',
+				// called when the resource is loaded
+				function ( gltf ) {
+	
+					scene.add( gltf.scene );
+	
+					gltf.animations; // Array&lt;THREE.AnimationClip&gt;
+					gltf.scene; // THREE.Scene
+					gltf.scenes; // Array&lt;THREE.Scene&gt;
+					gltf.cameras; // Array&lt;THREE.Camera&gt;
+	
+				},
+				// called when loading is in progresses
+				function ( xhr ) {
+	
+					console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
+	
+				},
+				// called when loading has errors
+				function ( error ) {
+	
+					console.log( 'An error happened' );
+	
+				}
+			);
+			</code>
 
 		[example:webgl_loader_gltf]
 
@@ -81,10 +98,10 @@
 
 		<h3>[method:null load]( [page:String url], [page:Function onLoad], [page:Function onProgress], [page:Function onError] )</h3>
 		<div>
-		[page:String url] — required<br />
-		[page:Function onLoad] — Will be called when load completes. The argument will be the loaded JSON response returned from [page:Function parse].<br />
-		[page:Function onProgress] — Will be called while load progresses. The argument will be the XMLHttpRequest instance, that contains .[page:Integer total] and .[page:Integer loaded] bytes.<br />
-		[page:Function onError] — Will be called when load errors.<br />
+		[page:String url] — A string containing the path/URL of the <em>.gltf</em> or <em>.glb</em> file.<br />
+		[page:Function onLoad] — (optional) A function to be called after the loading is successfully completed. The function receives the loaded JSON response returned from [page:Function parse].<br />
+		[page:Function onProgress] — (optional) A function to be called while the loading is in progress. The argument will be the XMLHttpRequest instance, that contains .[page:Integer total] and .[page:Integer loaded] bytes.<br />
+		[page:Function onError] — (optional) A function to be called if an error occurs during loading. The function receives error as an argument.<br />
 		</div>
 		<div>
 		Begin loading from url and call the callback function with the parsed response content.
@@ -103,14 +120,15 @@
 		[page:String value] — The crossOrigin string to implement CORS for loading the url from a different domain that allows CORS.
 		</div>
 
-		<h3>[method:null parse]( [page:Object json], [page:Function callBack], [page:String path] )</h3>
+		<h3>[method:null parse]( [page:ArrayBuffer data], [page:String path], [page:Function onLoad], [page:Function onError] )</h3>
 		<div>
-		[page:Object json] — <em>JSON</em> object to parse.<br />
-		[page:Function callBack] — Will be called when parse completes.<br />
+		[page:ArrayBuffer data] — glTF asset to parse, as an ArrayBuffer or <em>JSON</em> string.<br />
 		[page:String path] — The base path from which to find subsequent glTF resources such as textures and .bin data files.<br />
+		[page:Function onLoad] — A function to be called when parse completes.<br />
+		[page:Function onError] — (optional) A function to be called if an error occurs during parsing. The function receives error as an argument.<br />
 		</div>
 		<div>
-		Parse a glTF-based <em>JSON</em> structure and fire [page:Function callback] when complete. The argument to [page:Function callback] will be an [page:object] that contains loaded parts: .[page:Scene scene], .[page:Array scenes], .[page:Array cameras], and .[page:Array animations].
+		Parse a glTF-based ArrayBuffer or <em>JSON</em> String and fire [page:Function onLoad] callback when complete. The argument to [page:Function onLoad] will be an [page:object] that contains loaded parts: .[page:Scene scene], .[page:Array scenes], .[page:Array cameras], and .[page:Array animations].
 		</div>
 
 		<h2>Source</h2>

+ 670 - 0
docs/examples/loaders/LoaderSupport.html

@@ -0,0 +1,670 @@
+<!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">Supporting classes for file loaders and web worker based loaders.</div>
+
+		<h2>Sub-Classes</h2>
+		[page:LoaderSupport.Builder]<br>
+		[page:LoaderSupport.LoadedMeshUserOverride]<br>
+		[page:LoaderSupport.WorkerSupport]<br>
+		[page:LoaderSupport.WorkerRunnerRefImpl]<br>
+		[page:LoaderSupport.WorkerDirector]<br>
+		[page:LoaderSupport.PrepData]<br>
+		[page:LoaderSupport.LoaderBase]<br>
+		[page:LoaderSupport.Callbacks]<br>
+		[page:LoaderSupport.Validator]<br>
+		[page:LoaderSupport.ConsoleLogger]
+
+
+		<h2>Example</h2>
+
+		[example:webgl_loader_obj2_meshspray] - Example using [page:LoaderSupport.LoaderWorkerDirector] and [page:LoaderSupport.LoaderWorkerSupport].<br>
+
+		<h2>Classes</h2>
+		<br>
+
+		<a name="Builder"></a><h1>Builder</h1>
+		<h2>Constructor</h2>
+
+		<h3>Builder()</h3>
+		<div>
+			Builds one or many [page:Mesh] from one raw set of Arraybuffers, materialGroup descriptions and further parameters.
+			Supports vertex, vertexColor, normal, uv and index buffers.
+		</div>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null setMaterials] ( Array of [page:Material materials] )</h3>
+		<div>
+			Array of [page:Material materials] - Array of [page:Material Materials]
+		</div>
+		<div>
+			Set materials loaded by any supplier of an Array of [page:Material Materials].
+		</div>
+
+
+		<h3>[method:Array processPayload] ( Object payload )</h3>
+		<div>
+			[page:Object payload] - Raw Mesh or Material descriptions.
+		</div>
+		<div>
+			Delegates processing of the payload (mesh building or material update) to the corresponding functions (BW-compatibility).
+		</div>
+		<br>
+		<br>
+
+
+		<h3>[method:Array buildMeshes] ( Object meshPayload )</h3>
+		<div>
+			[page:Object meshPayload] - Raw mesh description (buffers, params, materials) used to build one to many meshes.
+		</div>
+		<div>
+			Builds one or multiple meshes from the data described in the payload (buffers, params, material info).
+		</div>
+		<br>
+		<br>
+
+
+		<h3>[method:null updateMaterials] ( Object materialPayload )</h3>
+		<div>
+			[page:Object materialPayload] - Material update instructions
+		</div>
+		<div>
+			Updates the materials with contained material objects (sync) or from alteration instructions (async).
+		</div>
+		<br>
+		<br>
+
+
+		<h3>[method:Object getMaterialsJSON] ()</h3>
+		<div>
+			Returns the mapping object of material name and corresponding jsonified material.
+		</div>
+		<br>
+		<br>
+
+
+		<h3>[method:Object getMaterials] ()</h3>
+		<div>
+			Returns the mapping object of material name and corresponding material.
+		</div>
+		<br>
+		<br>
+
+
+		<a name="LoadedMeshUserOverride"></a><h1>LoadedMeshUserOverride</h1>
+		<h2>Constructor</h2>
+
+		<h3>LoadedMeshUserOverride( [page:Boolean disregardMesh], [page:BufferGeometry bufferGeometry] )</h3>
+		<div>
+			[page:Boolean disregardMesh] - Tell implementation to completely disregard this mesh<br>
+			[page:Boolean alteredMesh] - Tell implementation that mesh(es) have been altered or added
+		</div>
+		<div>
+			Object to return by callback onMeshAlter. Used to disregard a certain mesh or to return one to many meshes.
+		</div>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null addMesh] ( [page:Mesh mesh] )</h3>
+		<div>
+			[page:Mesh mesh] - Mesh
+		</div>
+		<div>
+			Add a mesh created within callback.
+		</div>
+
+
+		<h3>[method:boolean isDisregardMesh] ()</h3>
+		<div>
+			Answers if mesh shall be disregarded completely.
+		</div>
+
+
+		<h3>[method:boolean providesAlteredMeshes] ()</h3>
+		<div>
+			Answers if new mesh(es) were created.
+		</div>
+		<br>
+		<br>
+
+
+		<a name="WorkerSupport"></a><h1>WorkerSupport</h1>
+		<h2>Constructor</h2>
+
+		<h3>WorkerSupport( [page:LoaderSupport.ConsoleLogger logger] )</h3>
+		<div>
+			[page:LoaderSupport.ConsoleLogger logger] - logger to be used
+		</div>
+		<div>
+			This class provides means to transform existing parser code into a web worker.
+			It defines a simple communication protocol which allows to configure the worker and receive raw mesh data during execution.
+		</div>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null validate] ( [page:Function functionCodeBuilder], [page:Boolean forceWorkerReload], Array of [page:String libLocations], [page:String libPath], [page:LoaderSupport.WorkerRunnerRefImpl runnerImpl] )</h3>
+		<div>
+			[page:Function functionCodeBuilder] - Function that is invoked with funcBuildObject and funcBuildSingelton that allows stringification of objects and singletons.<br>
+			[page:Boolean forceWorkerReload] - Force re-build of the worker code.<br>
+			Array of [page:String libLocations] - URL of libraries that shall be added to worker code relative to libPath.<br>
+			[page:String libPath] - Base path used for loading libraries.<br>
+			[page:LoaderSupport.WorkerRunnerRefImpl runnerImpl] - The default worker parser wrapper implementation (communication and execution). An extended class could be passed here.
+		</div>
+		<div>
+			Validate the status of worker code and the derived worker.
+		</div>
+
+
+		<h3>[method:null setTerminateRequested] ( [page:Boolean terminateRequested] )</h3>
+		<div>
+			[page:Boolean terminateRequested] - True or false.
+		</div>
+		<div>
+			Request termination of worker once parser is finished.
+		</div>
+
+
+		<h3>[method:null terminateWorker] ()</h3>
+		<div>
+			Terminate the worker and the code.
+		</div>
+
+
+		<h3>[method:null setCallbacks] ( [page:Function builder], [page:Function onLoad] )</h3>
+		<div>
+			[page:Function builder] - The builder function. Default is [page:LoaderSupport.Builder].<br>
+			[page:Function onLoad] - The function that is called when parsing is complete.
+		</div>
+		<div>
+			Specify functions that should be build when new raw mesh data becomes available and when the parser is finished.
+		</div>
+
+
+		<h3>[method:null run] ( [page:Object payload] )</h3>
+		<div>
+			[page:Object payload] - Raw mesh description (buffers, params, materials) used to build one to many meshes.
+		</div>
+		<div>
+			Runs the parser with the provided configuration.
+		</div>
+		<br>
+		<br>
+
+
+		<a name="WorkerRunnerRefImpl"></a><h1>WorkerRunnerRefImpl</h1>
+		<h2>Constructor</h2>
+
+		<h3>WorkerRunnerRefImpl()</h3>
+		<div>
+			Default implementation of the WorkerRunner responsible for creation and configuration of the parser within the worker.
+		</div>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null applyProperties] ( [page:Object parser], [page:Object params] )</h3>
+		<div>
+			[page:Object parser] - The parser instance<br>
+			[page:Object params] - The parameter object
+		</div>
+		<div>
+			Applies values from parameter object via set functions or via direct assignment.
+		</div>
+
+
+		<h3>[method:null run] ( [page:Object payload] )</h3>
+		<div>
+			[page:Object payload] - Raw mesh description (buffers, params, materials) used to build one to many meshes.
+		</div>
+		<div>
+			Configures the Parser implementation according the supplied configuration object.
+		</div>
+		<br>
+		<br>
+
+
+		<a name="WorkerDirector"></a><h1>WorkerDirector</h1>
+		<h2>Constructor</h2>
+
+		<h3>WorkerDirector( [page:String classDef], [page:LoaderSupport.ConsoleLogger logger] )</h3>
+		<div>
+			[page:String classDef] - Class definition to be used for construction<br>
+			[page:LoaderSupport.ConsoleLogger logger] - logger to be used
+		</div>
+		<div>
+			Orchestrate loading of multiple OBJ files/data from an instruction queue with a configurable amount of workers (1-16).<br>
+			- Workflow:<br>
+			- prepareWorkers<br>
+			- enqueueForRun<br>
+			- processQueue<br>
+			- deregister
+		</div>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null prepareWorkers]( [page:WWOBJLoader2.Callbacks globalCallbacks], [page:Number maxQueueSize], [page:Number maxWebWorkers] )</h3>
+		<div>
+			[page:LoaderSupport.Callbacks globalCallbacks] - Register global callbacks used by all web workers<br>
+			[page:Number maxQueueSize] - Set the maximum size of the instruction queue (1-1024)<br>
+			[page:Number maxWebWorkers] - Set the maximum amount of workers (1-16)
+		</div>
+		<div>
+			Create or destroy workers according limits. Set the name and register callbacks for dynamically created web workers.
+		</div>
+
+
+		<h3>[method:null enqueueForRun]( [page:LoaderSupport.PrepData runParams] )</h3>
+		<div>
+			[page:LoaderSupport.PrepData runParams]
+		</div>
+		<div>
+			Store run instructions in internal instructionQueue.
+		</div>
+
+
+		<h3>[method:null processQueue]()</h3>
+		<div>
+			Process the instructionQueue until it is depleted.
+		</div>
+
+
+		<h3>[method:null deregister]()</h3>
+		<div>
+			Terminate all workers.
+		</div>
+
+
+		<h3>[method:null getMaxQueueSize]()</h3>
+		<div>
+			Returns the maximum length of the instruction queue.
+		</div>
+
+
+		<h3>[method:null getMaxWebWorkers]()</h3>
+		<div>
+			Returns the maximum number of workers.
+		</div>
+
+
+		<h3>[method:null setCrossOrigin]( [page:String crossOrigin] )</h3>
+		<div>
+			[page:String crossOrigin] - CORS value
+		</div>
+		<div>
+			Sets the CORS string to be used.
+		</div>
+
+
+		<a name="PrepData"></a><h1>PrepData</h1>
+		<h2>Constructor</h2>
+
+		<h3>PrepData( [page:String modelName] )</h3>
+		<div>
+			[page:String modelName] - Overall name of the model
+		</div>
+		<div>
+			Configuration instructions to be used by run method.
+		</div>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null setStreamMeshesTo] ( [page:Object3D streamMeshesTo] )</h3>
+		<div>
+			[page:Object3D streamMeshesTo] - Object already attached to scenegraph where new meshes will be attached to
+		</div>
+		<div>
+			Set the node where the loaded objects will be attached directly.
+		</div>
+
+
+		<h3>[method:null setMaterialPerSmoothingGroup] ( [page:boolean materialPerSmoothingGroup] )</h3>
+		<div>
+			[page:boolean materialPerSmoothingGroup]
+		</div>
+		<div>
+			Tells whether a material shall be created per smoothing group.
+		</div>
+
+
+		<h3>[method:null setUseIndices]( [page:Boolean useIndices] )</h3>
+		<div>
+			[page:Boolean useIndices] - Default is false
+		</div>
+		<div>
+			Instructs loaders to create indexed [page:BufferGeometry].
+		</div>
+
+
+		<h3>[method:null setDisregardNormals]( [page:Boolean disregardNormals] )</h3>
+		<div>
+			[page:Boolean disregardNormals]
+		</div>
+		<div>
+			Tells whether normals should be completely disregarded and regenerated.
+		</div>
+
+
+		<h3>[method:Callbacks getCallbacks]()</h3>
+		<div>
+			Returns all callbacks as [page:LoaderSupport.Callbacks].
+		</div>
+
+
+		<h3>[method:null setCrossOrigin]( [page:String crossOrigin] )</h3>
+		<div>
+			[page:String crossOrigin] - CORS value
+		</div>
+		<div>
+			Sets the CORS string to be used.
+		</div>
+
+
+		<h3>[method:null addResource]( [page:LoaderSupport.ResourceDescriptor resource] )</h3>
+		<div>
+			[page:LoaderSupport.ResourceDescriptor resource]
+		</div>
+		<div>
+			Add a resource description.
+		</div>
+
+
+		<h3>[method:null setUseAsync]( [page:Boolean useAsync] )</h3>
+		<div>
+			[page:Boolean useAsync]
+		</div>
+		<div>
+			If true uses async loading with worker, if false loads data synchronously.
+		</div>
+		<br>
+		<br>
+
+
+		<a name="LoaderBase"></a><h1>LoaderBase</h1>
+		<h2>Constructor</h2>
+
+		<h3>LoaderBase( [page:LoadingManager manager], [page:LoaderSupport.ConsoleLogger logger] )</h3>
+		<div>
+			[page:LoadingManager manager] - The [page:LoadingManager loadingManager] for the loader to use. Default is [page:LoadingManager THREE.DefaultLoadingManager].
+			[page:LoaderSupport.ConsoleLogger logger] - logger to be used
+		</div>
+		<div>
+			Base class to be used by loaders.
+		</div>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:ConsoleLogger getLogger] ()</h3>
+		<div>
+			Returns [page:LoaderSupport.ConsoleLogger].
+		</div>
+
+
+		<h3>[method:null setModelName] ( [page:String modelName] )</h3>
+		<div>
+			[page:String modelName]
+		</div>
+		<div>
+			Set the name of the model.
+		</div>
+
+
+		<h3>[method:null setPath] ( [page:String path] )</h3>
+		<div>
+			[page:String path] - URL
+		</div>
+		<div>
+			The URL of the base path.
+		</div>
+
+
+		<h3>[method:null setStreamMeshesTo] ( [page:Object3D streamMeshesTo] )</h3>
+		<div>
+			[page:Object3D streamMeshesTo] - Object already attached to scenegraph where new meshes will be attached to
+		</div>
+		<div>
+			Set the node where the loaded objects will be attached directly.
+		</div>
+
+
+		<h3>[method:null setMaterials] ( Array of [page:Material materials] )</h3>
+		<div>
+			Array of [page:Material materials] - Array of [page:Material Materials]
+		</div>
+		<div>
+			Set materials loaded by MTLLoader or any other supplier of an Array of [page:Material Materials].
+		</div>
+
+
+		<h3>[method:null setUseIndices]( [page:Boolean useIndices] )</h3>
+		<div>
+			[page:Boolean useIndices]
+		</div>
+		<div>
+			Instructs loaders to create indexed [page:BufferGeometry].
+		</div>
+
+
+		<h3>[method:null setDisregardNormals]( [page:Boolean disregardNormals] )</h3>
+		<div>
+			[page:Boolean disregardNormals]
+		</div>
+		<div>
+			Tells whether normals should be completely disregarded and regenerated.
+		</div>
+
+
+		<h3>[method:null onProgress]( [page:String type], [page:String text], [page:Number numericalValue] )</h3>
+		<div>
+			[page:String type] - The type of event<br>
+			[page:String text] - Textual description of the event<br>
+			[page:Number numericalValue] - Numerical value describing the progress
+		</div>
+		<div>
+			Announce feedback which is give to the registered [page:LoaderSupport.Callbacks].
+		</div>
+		<br>
+		<br>
+
+
+		<a name="Callbacks"></a><h1>Callbacks</h1>
+		<h2>Constructor</h2>
+
+		<h3>Callbacks()</h3>
+		<div>
+			Callbacks utilized by loaders and builder.
+		</div>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null setCallbackOnProgress]( [page:Function callbackOnProgress] )</h3>
+		<div>
+			[page:Function callbackOnProgress] - Callback function for described functionality
+		</div>
+		<div>
+			Register callback function that is invoked by internal function "announceProgress" to print feedback.
+		</div>
+
+
+		<h3>[method:null setCallbackOnMeshAlter]( [page:Function callbackOnMeshAlter] )</h3>
+		<div>
+			[page:Function callbackOnMeshAlter] - Callback function for described functionality
+		</div>
+		<div>
+			Register callback function that is called every time a mesh was loaded.
+			Use [page:LoadedMeshUserOverride] for alteration instructions (geometry, material or disregard mesh).
+		</div>
+
+
+		<h3>[method:null setCallbackOnLoad]( [page:Function callbackOnLoad] )</h3>
+		<div>
+			[page:Function callbackOnLoad] - Callback function for described functionality
+		</div>
+		<div>
+			Register callback function that is called once loading of the complete OBJ file is completed.
+		</div>
+
+		<h3>[method:null setCallbackOnLoadMaterials]( [page:Function callbackOnLoadMaterials] )</h3>
+		<div>
+			[page:Function callbackOnLoadMaterials] - Callback function for described functionality
+		</div>
+		<div>
+			Register callback function that is called when materials have been loaded.
+		</div>
+		<br>
+		<br>
+
+
+		<a name="Validator"></a><h1>Validator</h1>
+		<h2>Constructor</h2>
+
+		<h3>Validator()</h3>
+		<div>
+			Validation functions.
+		</div>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null isValid]( [page:Object input] )</h3>
+		<div>
+			[page:Object input] - Can be anything
+		</div>
+		<div>
+			If given input is null or undefined, false is returned otherwise true.
+		</div>
+
+
+		<h3>[method:null verifyInput]( [page:Object input], [page:Object defaultValue] )</h3>
+		<div>
+			[page:Object input] - Can be anything
+			[page:Object defaultValue] - Can be anything
+		</div>
+		<div>
+			If given input is null or undefined, the defaultValue is returned otherwise the given input.
+		</div>
+		<br>
+		<br>
+
+
+		<a name="ConsoleLogger"></a><h1>ConsoleLogger</h1>
+		<h2>Constructor</h2>
+
+		<h3>ConsoleLogger( [page:Boolean enabled], [page:Boolean debug] )</h3>
+		<div>
+			[page:Boolean enabled] - Tell if logger is enabled.
+			[page:Boolean debug] - Toggle debug logging.
+		<div>
+			Logging wrapper for console.
+		</div>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null setDebug]( [page:Boolean debug] )</h3>
+		<div>
+			[page:Boolean debug] - True or False
+		</div>
+		<div>
+			Enable or disable debug logging.
+		</div>
+
+
+		<h3>[method:Boolean isDebug]()</h3>
+		<div>
+			Returns if is enabled and debug.
+		</div>
+
+		<h3>[method:null setEnabled]( [page:Boolean enabled] )</h3>
+		<div>
+			[page:Boolean enabled] - True or False
+		</div>
+		<div>
+			Enable or disable info, debug and time logging.
+		</div>
+
+
+		<h3>[method:Boolean isEnabled]()</h3>
+		<div>
+			Returns if is enabled.
+		</div>
+
+
+		<h3>[method:null logDebug]( [page:String message] )</h3>
+		<div>
+			[page:String message] - Message to log
+		</div>
+		<div>
+			Log a debug message if enabled and debug is set.
+		</div>
+
+
+		<h3>[method:null logInfo]( [page:String message] )</h3>
+		<div>
+			[page:String message] - Message to log
+		</div>
+		<div>
+			Log an info message if enabled.
+		</div>
+
+
+		<h3>[method:null logWarn]( [page:String message] )</h3>
+		<div>
+			[page:String message] - Message to log
+		</div>
+		<div>
+			Log a warn message (always).
+		</div>
+
+
+		<h3>[method:null logError]( [page:String message] )</h3>
+		<div>
+			[page:String message] - Message to log
+		</div>
+		<div>
+			Log an error message (always).
+		</div>
+
+
+		<h3>[method:null logTimeStart]( [page:String id] )</h3>
+		<div>
+			[page:String id] - Time identification
+		</div>
+		<div>
+			Start time measurement with provided id.
+		</div>
+
+
+		<h3>[method:null logTimeEnd]( [page:String id] )</h3>
+		<div>
+			[page:String id] - Time identification
+		</div>
+		<div>
+			Stop time measurement started with provided id.
+		</div>
+		<br>
+		<br>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/loaders/LoaderSupport.js examples/js/loaders/LoaderSupport.js]
+
+	</body>
+</html>

+ 9 - 6
docs/examples/loaders/MTLLoader.html

@@ -11,7 +11,10 @@
 
 		<h1>[name]</h1>
 
-		<div class="desc">A loader for loading an <em>.mtl</em> resource, used internaly by [page:OBJMTLLoader] and [page:UTF8Loader].</div>
+		<div class="desc">A loader for loading an <em>.mtl</em> resource, used internaly by [page:OBJMTLLoader] and [page:UTF8Loader].<br />
+		The Material Template Library format (MTL) or .MTL File Format is a companion file format to .OBJ that describes surface shading
+		(material) properties of objects within one or more .OBJ files. 		
+		</div>
 
 		<h2>Constructor</h2>
 
@@ -23,7 +26,7 @@
 			Creates a new [name].
 		</div>
 
-		<!-- <h2>Properties</h2> -->
+		<h2>Properties</h2>
 
 
 		<h2>Methods</h2>
@@ -31,10 +34,10 @@
 
 		<h3>[method:null load]( [page:String url], [page:Function onLoad], [page:Function onProgress], [page:Function onError] )</h3>
 		<div>
-			[page:String url] — required<br />
-			[page:Function onLoad] — Will be called when load completes. The argument will be the loaded [page:MTLLoaderMaterialCreator MTLLoader.MaterialCreator] instance.<br />
-			[page:Function onProgress] — Will be called while load progresses. The argument will be the XMLHttpRequest instance, which contains .[page:Integer total] and .[page:Integer loaded] bytes.<br />
-			[page:Function onError] — Will be called when load errors.<br />
+			[page:String url] — A string containing the path/URL of the <em>.mtl</em> file.<br />
+			[page:Function onLoad] — (optional) A function to be called after the loading is successfully completed. The function receives the loaded [page:MTLLoaderMaterialCreator MTLLoader.MaterialCreator] instance.<br />
+			[page:Function onProgress] — (optional) A function to be called while the loading is in progress. The argument will be the XMLHttpRequest instance, which contains [page:Integer total] and [page:Integer loaded] bytes.<br />
+			[page:Function onError] — (optional) A function to be called if an error occurs during loading. The function receives the error as an argument.<br />
 		</div>
 		<div>
 			Begin loading from url and return the loaded material.

+ 40 - 21
docs/examples/loaders/OBJLoader.html

@@ -11,27 +11,46 @@
 
 		<h1>[name]</h1>
 
-		<div class="desc">A loader for loading an <em>.obj</em> resource.</div>
+		<div class="desc">A loader for loading a <em>.obj</em> resource.<br />
+		The <a href="https://en.wikipedia.org/wiki/Wavefront_.obj_file">OBJ file format</a> is a simple data-format 
+		that represents 3D geometry in a human redeable format as, the position of each vertex, the UV position of 
+		each texture coordinate vertex, vertex normals, and the faces that make each polygon defined as a list of 
+		vertices, and texture vertices.
+		</div>
+
+
+		<h2>Example</h2>
+
+		<code>
+		// instantiate a loader
+		var loader = new THREE.OBJLoader();
+
+		// load a resource
+		loader.load(
+			// resource URL
+			'models/monster.obj',
+			// called when resource is loaded
+			function ( object ) {
+
+				scene.add( object );
+
+			},
+			// called when loading is in progresses
+			function ( xhr ) {
 
+				console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
 
-				<h2>Example</h2>
+			},
+			// called when loading has errors
+			function ( error ) {
 
-				<code>
-				// instantiate a loader
-				var loader = new THREE.OBJLoader();
+				console.log( 'An error happened' );
 
-				// load a resource
-				loader.load(
-					// resource URL
-					'models/monster.obj',
-					// Function when resource is loaded
-					function ( object ) {
-						scene.add( object );
-					}
-				);
-				</code>
+			}
+		);
+		</code>
 
-				[example:webgl_loader_obj]
+		[example:webgl_loader_obj]
 
 
 		<h2>Constructor</h2>
@@ -51,10 +70,10 @@
 
 		<h3>[method:null load]( [page:String url], [page:Function onLoad], [page:Function onProgress], [page:Function onError] )</h3>
 		<div>
-		[page:String url] — required<br />
-		[page:Function onLoad] — Will be called when load completes. The argument will be the loaded [page:Object3D].<br />
-		[page:Function onProgress] — Will be called while load progresses. The argument will be the XMLHttpRequest instance, which contains .[page:Integer total] and .[page:Integer loaded] bytes.<br />
-		[page:Function onError] — Will be called when load errors.<br />
+		[page:String url] — A string containing the path/URL of the <em>.obj</em> file.<br />
+		[page:Function onLoad] — (optional) A function to be called after the loading is successfully completed. The function receives the loaded [page:Object3D] as an argument.<br />
+		[page:Function onProgress] — (optional) A function to be called while the loading is in progress. The function receives a XMLHttpRequest instance, which contains [page:Integer total] and [page:Integer loaded] bytes.<br />
+		[page:Function onError] — (optional) A function to be called if an error occurs during loading. The function receives error as an argument.<br />
 		</div>
 		<div>
 		Begin loading from url and call onLoad with the parsed response content.
@@ -67,7 +86,7 @@
 		<div>
 		Returns an [page:Object3D]. It contains the parsed meshes as [page:Mesh] and lines as [page:LineSegments].<br />
 		All geometry is created as [page:BufferGeometry]. Default materials are created as [page:MeshPhongMaterial].<br />
-		If an <em>obj</em> object or group uses multiple materials while declaring faces geometry groups and an array of materials are used.
+		If an <em>obj</em> object or group uses multiple materials while declaring faces, geometry groups and an array of materials are used.
 		</div>
 
 		<h2>Source</h2>

+ 94 - 36
docs/examples/loaders/OBJLoader2.html

@@ -11,100 +11,158 @@
 
 		<h1>[name]</h1>
 
-		<div class="desc">A loader for loading an <em>.obj</em> resource.</div>
+		<div class="desc">A loader for loading a <em>.obj</em> resource. <br />
+			The <a href="https://en.wikipedia.org/wiki/Wavefront_.obj_file">OBJ file format</a> is a simple data-format
+			that represents 3D geometry in a human redeable format as, the position of each vertex, the UV position of
+			each texture coordinate vertex, vertex normals, and the faces that make each polygon defined as a list of
+			vertices, and texture vertices.
+		</div>
 
-		<h2>Example</h2>
+		<h2>Examples</h2>
 
 		<code>
 		// instantiate the loader
 		var loader = new THREE.OBJLoader2();
 
 		// function called on successful load
-		var intergrateIntoScene = function ( object ) {
-			scene.add( object );
+		var callbackOnLoad = function ( event ) {
+			scene.add( event.detail.loaderRootNode );
 		};
 
-		// load a resource from provided URL
-		loader.load( 'obj/female02/female02.obj', intergrateIntoScene );
+		// load a resource from provided URL synchronously
+		loader.load( 'obj/female02/female02.obj', callbackOnLoad, null, null, null, false );
 		</code>
 
-		[example:webgl_loader_obj2]
+		[example:webgl_loader_obj2] - Simple example <br>
+		[example:webgl_loader_obj2_options] - Example for multiple use-cases (parse, load and run with instructions (sync and async)<br>
+		[example:webgl_loader_obj2_run_director] - Advanced example using [page:LoaderSupport.LoaderWorkerDirector] for orchestration of multiple workers.
 
 
 		<h2>Constructor</h2>
 
-		<h3>[name]( [page:LoadingManager manager] )</h3>
+		<h3>[name]( [page:LoadingManager manager], [page:LoaderSupport.ConsoleLogger logger] )</h3>
 		<div>
-		[page:LoadingManager manager] — The [page:LoadingManager loadingManager] for the loader to use. Default is [page:LoadingManager THREE.DefaultLoadingManager].
+			[page:LoadingManager manager] - The [page:LoadingManager loadingManager] for the loader to use. Default is [page:LoadingManager THREE.DefaultLoadingManager].
+			[page:LoaderSupport.ConsoleLogger logger] - logger to be used
 		</div>
 		<div>
 			Use [name] to load OBJ data from files or to parse OBJ data from arraybuffer or text.
 		</div>
 
-		<h2>Properties</h2>
-
 
 		<h2>Methods</h2>
 
-		<h3>[method:null load]( [page:String url], [page:Function onLoad], [page:Function onProgress], [page:Function onError], [page:Boolean useArrayBuffer] )</h3>
+		<h3>[method:Object3D parse]( {[page:arraybuffer content]|[page:String content]] )</h3>
 		<div>
-			[page:String url] — URL of the file to load<br />
-			[page:Function onLoad] — Called after loading was successfully completed. The argument will be the loaded [page:Object3D].<br />
-			[page:Function onProgress] — Called to report progress of loading. The argument will be the XMLHttpRequest instance, which contains .[page:Integer total] and .[page:Integer loaded] bytes.<br />
-			[page:Function onError]  Called after an error occurred during loading.<br />
-			[page:boolean useArrayBuffer] — Set this to false to force string based parsing<br />
+			[[page:arraybuffer content]|[page:String content]] OBJ data as Uint8Array or String
 		</div>
 		<div>
-			Use this convenient method to load an OBJ file at the given URL. Per default the fileLoader uses an arraybuffer
+			Parses OBJ data synchronously from arraybuffer or string and returns the [page:Object3D loaderRoorNode].
 		</div>
 
-		<h3>[method:Object3D parse]( [page:ArrayBuffer arrayBuffer] )</h3>
+
+		<h3>[method:Object3D parseAsync]( [page:arraybuffer content], [page:Function onLoad] )</h3>
 		<div>
-			[page:ArrayBuffer arrayBuffer] — OBJ data as Uint8Array
+			[page:arraybuffer content] - OBJ data as Uint8Array<br>
+			[page:Function onLoad] - Called after worker successfully completed loading<br>
 		</div>
 		<div>
-			Default parse function: Parses OBJ file content stored in arrayBuffer and returns the [page:Object3D sceneGraphBaseNode].
+			Parses OBJ content asynchronously from arraybuffer.
 		</div>
 
-		<h3>[method:Object3D parseText]( [page:String test] )</h3>
+
+		<h3>[method:null load]( [page:String url], [page:Function onLoad], [page:Function onProgress], [page:Function onError], [page:Function onMeshAlter], [page:boolean useAsync] )</h3>
 		<div>
-			[page:String text] — OBJ data as string
+			[page:String url] - A string containing the path/URL of the <em>.obj</em> file.<br>
+			[page:Function onLoad] - A function to be called after loading is successfully completed. The function receives loaded [page:Object3D] as an argument.<br>
+			[page:Function onProgress] - (optional) A function to be called while the loading is in progress. The argument will be the XMLHttpRequest instance, which contains [page:Integer total] and [page:Integer loaded] bytes.<br>
+			[page:Function onError] - (optional) A function to be called if an error occurrs during loading. The function receives the error as an argument.<br>
+			[page:Function onMeshAlter] - (optional) A function to be called after a new mesh raw data becomes available for alteration.<br>
+			[page:boolean useAsync] - (optional) If true, uses async loading with worker, if false loads data synchronously.
 		</div>
 		<div>
-			Legacy parse function: Parses OBJ file content stored in string and returns the [page:Object3D sceneGraphBaseNode].
+			Use this convenient method to load an OBJ file at the given URL. By default the fileLoader uses an arraybuffer.
 		</div>
 
-		<h3>[method:null setMaterials] ( Array of [page:Material materials] )</h3>
+
+		<h3>[method:null run]( [page:LoaderSupport.PrepData params], [page:LoaderSupport.WorkerSupport workerSupportExternal] )</h3>
 		<div>
-			Array of [page:Material materials] — Array of [page:Material Materials] from MTLLoader
+			[page:LoaderSupport.PrepData params] - prepData All parameters and resources required for execution<br>
+			[page:LoaderSupport.WorkerSupport workerSupportExternal] - Use pre-existing WorkerSupport
 		</div>
 		<div>
-			Set materials loaded by MTLLoader or any other supplier of an Array of [page:Material Materials].
+			Run the loader according the provided instructions.
 		</div>
 
+
+		<h3>[method:null setMaterialPerSmoothingGroup] ( [page:boolean materialPerSmoothingGroup] )</h3>
+		<div>
+			[page:boolean materialPerSmoothingGroup]
+		</div>
+		<div>
+			Tells whether a material shall be created per smoothing group.
+		</div>
+
+
+		<h2>The following methods are inherited from [page:LoaderSupport.Commons]</h2>
+
+		<h3>[method:ConsoleLogger getLogger] ()</h3>
+		<div>
+			Returns [page:LoaderSupport.ConsoleLogger].
+		</div>
+
+
+		<h3>[method:null setModelName] ( [page:String modelName] )</h3>
+		<div>
+			[page:String modelName]
+		</div>
+		<div>
+			Set the name of the model.
+		</div>
+
+
 		<h3>[method:null setPath] ( [page:String path] )</h3>
 		<div>
-			[page:String path] — The basePath
+			[page:String path] - URL
+		</div>
+		<div>
+			The URL of the base path.
+		</div>
+
+
+		<h3>[method:null setStreamMeshesTo] ( [page:Object3D streamMeshesTo] )</h3>
+		<div>
+			[page:Object3D streamMeshesTo] - Object already attached to scenegraph where new meshes will be attached to
 		</div>
 		<div>
-			Base path to use.
+			Set the node where the loaded objects will be attached directly.
 		</div>
 
-		<h3>[method:null setSceneGraphBaseNode] ( [page:Object3D sceneGraphBaseNode] )</h3>
+
+		<h3>[method:null setMaterials] ( Array of [page:Material materials] )</h3>
+		<div>
+			Array of [page:Material materials] - Array of [page:Material Materials]
+		</div>
+		<div>
+			Set materials loaded by MTLLoader or any other supplier of an Array of [page:Material Materials].
+		</div>
+
+
+		<h3>[method:null setUseIndices]( [page:Boolean useIndices] )</h3>
 		<div>
-			[page:Object3D sceneGraphBaseNode] — Scenegraph object where meshes will be attached
+			[page:Boolean useIndices]
 		</div>
 		<div>
-			Set the node where the loaded objects will be attached.
+			Instructs loaders to create indexed [page:BufferGeometry].
 		</div>
 
-		<h3>[method:null setDebug]( [page:Boolean parserDebug], [page:Boolean meshCreatorDebug] )</h3>
+
+		<h3>[method:null setDisregardNormals]( [page:Boolean disregardNormals] )</h3>
 		<div>
-			[page:Boolean parserDebug] — Internal Parser will produce debug output<br>
-			[page:Boolean meshCreatorDebug] — Internal MeshCreator will produce debug output
+			[page:Boolean disregardNormals]
 		</div>
 		<div>
-			Allows to set debug mode for the parser and the meshCreator.
+			Tells whether normals should be completely disregarded and regenerated.
 		</div>
 
 		<h2>Source</h2>

+ 24 - 8
docs/examples/loaders/PCDLoader.html

@@ -11,8 +11,10 @@
 
 		<h1>[name]</h1>
 
-		<div class="desc">A loader for <em>PCD</em> files. Loads ascii and binary.
-			Compressed binary files are not supported.</div>
+		<div class="desc">A loader for loading a <em>.pcd</em> resource. <br />
+		Point Cloud Data is a file format for <a href="https://en.wikipedia.org/wiki/Point_Cloud_Library">Point Cloud Library</a>. <br />
+		Loader support ascii and binary. Compressed binary files are not supported.
+		</div>
 
 		<h2>Example</h2>
 
@@ -24,10 +26,24 @@
 		// load a resource
 		loader.load(
 			// resource URL
-			'pointcloud.pcd' ,
-			// Function when resource is loaded
+			'pointcloud.pcd',
+			// called when the resource is loaded
 			function ( mesh ) {
+
 				scene.add( mesh );
+
+			},
+			// called when loading is in progresses
+			function ( xhr ) {
+
+				console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
+
+			},
+			// called when loading has errors
+			function ( error ) {
+
+				console.log( 'An error happened' );
+
 			}
 		);
 		</code>
@@ -56,10 +72,10 @@
 
 		<h3>[method:null load]( [page:String url], [page:Function onLoad], [page:Function onProgress], [page:Function onError] )</h3>
 		<div>
-		[page:String url] — required<br />
-		[page:Function onLoad] — Will be called when load completes. The argument will be the loaded [page:Object3D].<br />
-		[page:Function onProgress] — Will be called while load progresses. The argument will be the XMLHttpRequest instance, which contains .[page:Integer total] and .[page:Integer loaded] bytes.<br />
-		[page:Function onError] — Will be called when load errors.<br />
+		[page:String url] — A string containing the path/URL of the <em>.pcd</em> file.<br />
+		[page:Function onLoad] — (optional) A function to be called after loading is successfully completed. The function receives loaded [page:Object3D] as an argument.<br />
+		[page:Function onProgress] — (optional) A function to be called while the loading is in progress. The argument will be the XMLHttpRequest instance, which contains [page:Integer total] and [page:Integer loaded] bytes.<br />
+		[page:Function onError] — (optional) A function to be called if an error occurs during loading. The function receives the error as an argument.<br />
 		</div>
 		<div>
 		Begin loading from url and call onLoad with the parsed response content.

+ 23 - 25
docs/examples/loaders/PDBLoader.html

@@ -11,10 +11,8 @@
 
 		<h1>[name]</h1>
 
-		<div class="desc">
-		A loader for loading a <em>.pdb</em> resource.
-		<br /><br />
-		The <a href="http://en.wikipedia.org/wiki/Protein_Data_Bank_(file_format)">Protein Data Bank file format</a> is a textual file format describing the three-dimensional structures of molecules.
+		<div class="desc">A loader for loading a <em>.pdb</em> resource.<br>
+		The <a href="http://en.wikipedia.org/wiki/Protein_Data_Bank_(file_format)">Protein Data Bank</a> file format is a textual file describing the three-dimensional structures of molecules.
 		</div>
 
 		<h2>Example</h2>
@@ -27,17 +25,27 @@
 		loader.load(
 			// resource URL
 			'models/molecules/caffeine.pdb',
-			// Function when resource is loaded
-			function ( geometryAtoms, geometryBonds, json ) {
+			// called when the resource is loaded
+			function ( pdb ) {
+
+				var geometryAtoms = pdb.geometryAtoms;
+				var geometryBonds = pdb.geometryBonds;
+				var json = pdb.json;
+
 				console.log( 'This molecule has ' + json.atoms.length + ' atoms' );
+
 			},
-			// Function called when download progresses
+			// called when loading is in progresses
 			function ( xhr ) {
-				console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
+
+				console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
+
 			},
-			// Function called when download errors
-			function ( xhr ) {
+			// called when loading has errors
+			function ( error ) {
+
 				console.log( 'An error happened' );
+
 			}
 		);
 		</code>
@@ -62,16 +70,16 @@
 
 		<h3>[method:null load]( [page:String url], [page:Function onLoad], [page:Function onProgress], [page:Function onError] )</h3>
 		<div>
-		[page:String url] — required. URL to the <em>.pdb</em> file<br />
-		[page:Function onLoad] — Will be called when load completes. The arguments will be an [page:BufferGeometry geometryAtoms], [page:BufferGeometry geometryBonds] and the [page:Object JSON] structure.<br />
-		[page:Function onProgress] — Will be called while load progresses. The argument will be the XMLHttpRequest instance, which contains .[page:Integer total] and .[page:Integer loaded] bytes.<br />
-		[page:Function onError] — Will be called when load errors.<br />
+		[page:String url] — A string containing the path/URL of the <em>.pdb</em> file.<br />
+		[page:Function onLoad] — (optional) A function to be called after loading is successfully completed. The function receives the object having the following properties. [page:BufferGeometry geometryAtoms], [page:BufferGeometry geometryBonds] and the [page:Object JSON] structure.<br />
+		[page:Function onProgress] — (optional) A function to be called while the loading is in progress. The argument will be the XMLHttpRequest instance, which contains [page:Integer total] and [page:Integer loaded] bytes.<br />
+		[page:Function onError] — (optional) A function to be called if an error occurs during loading. The function receives the error as an argument.<br />
 		</div>
 		<div>
 		Begin loading from url and call onLoad with the parsed response content.
 		</div>
 
-		<h3>[method:Object parsePDB]( [page:String text] )</h3>
+		<h3>[method:Object parse]( [page:String text] )</h3>
 		<div>
 		[page:String text] — The textual <em>pdb</em> structure to parse.
 		</div>
@@ -79,16 +87,6 @@
 		Parse a <em>pdb</em> text and return a <em>JSON</em> structure.<br />
 		</div>
 
-		<h3>[method:null createModel]( [page:Object json], [page:Function callback] )</h3>
-		<div>
-		[page:Object json] — The <em>(JSON) pdb</em> structure to parse.<br />
-		[page:Function callback] — Will be called when parse completes, with three arguments: [page:BufferGeometry geometryAtoms], [page:BufferGeometry geometryBonds] and the original [page:Object json].<br />
-		</div>
-		<div>
-		Parse a <em>(JSON) pdb</em> structure and return two [page:BufferGeometry]: one for atoms, one for bonds.<br />
-		</div>
-
-
 		<h2>Source</h2>
 
 		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/loaders/PDBLoader.js examples/js/loaders/PDBLoader.js]

+ 108 - 0
docs/examples/loaders/PRWMLoader.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>
+
+		<div class="desc">A loader for loading a <em>.prwm</em> resource.<br />
+		Packed Raw WebGL Model is an open-source binary file format for nD geometries specifically designed for
+		JavaScript and WebGL with a strong focus on fast parsing (from 1ms to 0.1ms in Chrome 59
+		on a MBP Late 2013). The parsing of PRWM file is especially fast when the endianness of the file is
+		the same as the endianness of the client platform. More information
+		on this <a href="https://github.com/kchapelier/PRWM">here</a>.
+		</div>
+
+		<h2>Example</h2>
+
+		<code>
+		// instantiate a loader
+		var loader = new THREE.PRWMLoader();
+
+		// load a resource
+		loader.load(
+			// resource URL
+			'models/nefertiti.le.prwm',
+			// called when resource is loaded
+			function ( bufferGeometry ) {
+
+				var object = new THREE.Mesh( bufferGeometry, new THREE.MeshNormalMaterial() );
+				scene.add( object );
+
+			},
+			// called when loading is in progresses
+			function ( xhr ) {
+
+				console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
+
+			},
+			// called when loading has errors
+			function ( error ) {
+
+				console.log( 'An error happened' );
+
+			}
+		);
+		</code>
+
+		[example:webgl_loader_prwm]
+
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( [page:LoadingManager manager] )</h3>
+		<div>
+		[page:LoadingManager manager] — The [page:LoadingManager loadingManager] for the loader to use. Default is [page:LoadingManager THREE.DefaultLoadingManager].
+		</div>
+		<div>
+		Creates a new [name].
+		</div>
+
+		<h2>Properties</h2>
+
+
+		<h2>Methods</h2>
+
+		<h3>[method:null load]( [page:String url], [page:Function onLoad], [page:Function onProgress], [page:Function onError] )</h3>
+		<div>
+		[page:String url] — A string containing the path/URL of the <em>.prwm</em> file. Any <em>*</em> character in the URL will be automatically replaced by <em>le</em> or <em>be</em> depending on the platform endianness.<br />
+		[page:Function onLoad] — (optional) A function to be called after the loading is successfully completed. The function receives the loaded [page:BufferGeometry] as an argument.<br />
+		[page:Function onProgress] — (optional) A function to be called while the loading is in progress. The function receives a XMLHttpRequest instance, which contains [page:Integer total] and [page:Integer loaded] bytes.<br />
+		[page:Function onError] — (optional) A function to be called if an error occurs during loading. The function receives error as an argument.<br />
+		</div>
+		<div>
+		Begin loading from url and call onLoad with the parsed response content.
+		</div>
+
+		<h3>[method:BufferGeometry parse]( [page:ArrayBuffer arrayBuffer] )</h3>
+		<div>
+		[page:ArrayBuffer arrayBuffer] — ArrayBuffer containing the <em>prwm</em> data.
+		</div>
+		<div>
+		Parse a <em>prwm</em> file passed as an ArrayBuffer and directly return an instance of [page:BufferGeometry].
+		</div>
+
+		<h3>PRWMLoader.isBigEndianPlatform( )</h3>
+
+		<div>
+		Return true if the endianness of the platform is Big Endian, false otherwise.
+		</div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/loaders/PRWMLoader.js examples/js/loaders/PRWMLoader.js]
+
+		<h2>Additional notes</h2>
+
+		<div>
+		This loader is additionally available on npm as <a href="https://www.npmjs.com/package/three-prwm-loader">three-prwm-loader</a>.
+		</div>
+
+	</body>
+</html>

+ 43 - 5
docs/examples/loaders/SVGLoader.html

@@ -11,9 +11,47 @@
 
 		<h1>[name]</h1>
 
-		<div class="desc">A loader for loading an <em>.svg</em> resource.</div>
+		<div class="desc">A loader for loading a <em>.svg</em> resource.<br >
+		<a href="https://en.wikipedia.org/wiki/Scalable_Vector_Graphics">Scalabe Vector Graphics</a> is an XML-based vector image format for two-dimensional graphics with support for interactivity and animation.			
+		</div>
+
+		<h2>Example</h2>
+		
+		<code>
+		// instantiate a loader
+		var loader = new THREE.PDBLoader();
+
+		// load a PDB resource
+		loader.load(
+			// resource URL
+			'models/molecules/caffeine.pdb',
+			// called when the resource is loaded
+			function ( pdb ) {
+
+				var geometryAtoms = pdb.geometryAtoms;
+				var geometryBonds = pdb.geometryBonds;
+				var json = pdb.json;
+
+				console.log( 'This molecule has ' + json.atoms.length + ' atoms' );
+
+			},
+			// called when loading is in progresses
+			function ( xhr ) {
+
+				console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
+
+			},
+			// called when loading has errors
+			function ( error ) {
+
+				console.log( 'An error happened' );
 
+			}
+		);
+		</code>
 
+		[example:webgl_loader_svg]
+		
 		<h2>Constructor</h2>
 
 		<h3>[name]( [page:LoadingManager manager] )</h3>
@@ -31,10 +69,10 @@
 
 		<h3>[method:null load]( [page:String url], [page:Function onLoad], [page:Function onProgress], [page:Function onError] )</h3>
 		<div>
-		[page:String url] — required<br />
-		[page:Function onLoad] — Will be called when load completes. The argument will be the loaded [page:SVGDocument].<br />
-		[page:Function onProgress] — Will be called while load progresses. The argument will be the XMLHttpRequest instance, which contains .[page:Integer total] and .[page:Integer loaded] bytes.<br />
-		[page:Function onError] — Will be called when load errors.<br />
+		[page:String url] — A string containing the path/URL of the <em>.svg</em> file.<br />
+		[page:Function onLoad] — (optional) A function to be called after loading is successfully completed. The function receives the loaded [page:SVGDocument] as an argument.<br />
+		[page:Function onProgress] — (optional) A function to be called while the loading is in progress. The argument will be the XMLHttpRequest instance, which contains [page:Integer total] and [page:Integer loaded] bytes.<br />
+		[page:Function onError] — (optional) A function to be called if an error occurs during loading. The function receives the error as an argument.<br />
 		</div>
 		<div>
 		Begin loading from url and call onLoad with the response content.

+ 19 - 12
docs/examples/loaders/TGALoader.html

@@ -10,8 +10,9 @@
 	<body>
 		<h1>[name]</h1>
 
-		<div class="desc">Class for loading a <em>.tga</em> [page:DataTexture texture].</div>
-
+		<div class="desc">A loader for loading a <em>.tga</em> resource. <br />
+		<a href="https://en.wikipedia.org/wiki/Truevision_TGA">TGA</a> is a raster graphics, image file format.
+		</div>
 
 		<h2>Example</h2>
 
@@ -23,20 +24,26 @@
 		var texture = loader.load(
 			// resource URL
 			'textures/crate_grey8.tga'
-			// Function when resource is loaded
+			// called when loading is completed
 			function ( texture ) {
+
 				console.log( 'Texture is loaded' );
+
 			},
-			// Function called when download progresses
+			// called when the loading is in progresses
 			function ( xhr ) {
-				console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
+
+				console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
+
 			},
-			// Function called when download errors
-			function ( xhr ) {
+			// called when the loading failes
+			function ( error ) {
+
 				console.log( 'An error happened' );
+
 			}
 		);
-
+		
 		var material = new THREE.MeshPhongMaterial( {
 			color: 0xffffff,
 			map: texture
@@ -60,10 +67,10 @@
 
 		<h3>[method:DataTexture load]( [page:String url], [page:Function onLoad], [page:Function onProgress], [page:Function onError] )</h3>
 		<div>
-		[page:String url] — required<br />
-		[page:Function onLoad] — Will be called when load completes. The argument will be the loaded [page:DataTexture].<br />
-		[page:Function onProgress] — Will be called while load progresses. The argument will be the XMLHttpRequest instance, which contains .[page:Integer total] and .[page:Integer loaded] bytes.<br />
-		[page:Function onError] — Will be called when load errors.<br />
+		[page:String url] — A string containing the path/URL of the <em>.tga</em> file. <br />
+		[page:Function onLoad] — (optional) A function to be called after loading is successfully completed. The function receives loaded [page:DataTexture] as an argument.<br />
+		[page:Function onProgress] — (optional) A function to be called while the loading is in progress. The argument will be the XMLHttpRequest instance, which contains .[page:Integer total] and .[page:Integer loaded] bytes.<br />
+		[page:Function onError] — (optional) A function to be called if an error occurs during loading. The function receives the error as an argument.<br />
 		</div>
 		<div>
 		Begin loading from url and pass the loaded [page:DataTexture texture] to onLoad. The [page:DataTexture texture] is also directly returned for immediate use (but may not be fully loaded).

+ 0 - 404
docs/examples/loaders/WWOBJLoader2.html

@@ -1,404 +0,0 @@
-<!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">A loader for loading an <em>.obj</em> resource within a web worker.</div>
-
-		<h2>Sub-Classes</h2>
-		[page:WWOBJLoader2.PrepDataArrayBuffer]<br>
-		[page:WWOBJLoader2.PrepDataFile]<br>
-		[page:WWOBJLoader2.PrepDataCallbacks]<br>
-		[page:WWOBJLoader2.LoadedMeshUserOverride]<br>
-		[page:WWOBJLoader2.WWOBJLoader2Director]
-
-		<h2>Example</h2>
-
-		<code>
-			// instantiate the loader
-			var loader = new THREE.OBJLoader2.WWOBJLoader2();
-
-			// load an OBJ file by providing a name, the path and the file name
-			var prepData = new THREE.OBJLoader2.WWOBJLoader2.PrepDataFile(
-				'female02',
-				'obj/female02/',
-				'female02.obj'
-			);
-
-			// set where to add the loaded data in the scene graph.
-			prepData.setSceneGraphBaseNode( scene );
-
-			// provide the preparation data to the loader and let it run.
-			loader.prepareRun( prepData );
-			loader.run();
-		</code>
-
-		[example:webgl_loader_obj2_ww] — Simple example that allows to load own models via file selection.<br>
-		[example:webgl_loader_obj2_ww_parallels] — Advanced example using [page:WWOBJLoader2.WWOBJLoader2Director] for orchestration of multiple workers.
-
-
-		<h2>Constructor</h2>
-
-		<h3>[name]()</h3>
-		<div>
-			OBJ data will be loaded by dynamically created web worker.<br>
-			First feed instructions with: [page:WWOBJLoader2.prepareRun prepareRun]<br>
-			Then execute with: [page:WWOBJLoader2.run run]
-		</div>
-
-		<h2>Properties</h2>
-
-
-		<h2>Methods</h2>
-
-		<h3>[method:null prepareRun]( [page:Object params] )</h3>
-		<div>
-			[page:Object params] — Either [page:WWOBJLoader2.PrepDataArrayBuffer] or [page:WWOBJLoader2.PrepDataFile]
-		</div>
-		<div>
-			Set all parameters for required for execution of [page:WWOBJLoader2.run run].
-		</div>
-
-
-		<h3>[method:null run]()</h3>
-		<div>
-			Run the loader according the preparation instruction provided in [page:WWOBJLoader2.prepareRun prepareRun].
-		</div>
-
-
-		<h3>[method:null setCrossOrigin]( [page:String crossOrigin] )</h3>
-		<div>
-			[page:String crossOrigin] — CORS value
-		</div>
-		<div>
-			Sets the CORS string to be used.
-		</div>
-
-
-		<h3>[method:null setDebug]( [page:Boolean enabled] )</h3>
-		<div>
-			[page:Boolean enabled] — True or false
-		</div>
-		<div>
-			Enable or disable debug logging.
-		</div>
-
-
-		<h3>[method:null setRequestTerminate]( [page:Boolean requestTerminate] )</h3>
-		<div>
-			[page:Boolean requestTerminate] — True or false
-		</div>
-		<div>
-			Call requestTerminate to terminate the web worker and free local resource after execution.
-		</div>
-
-
-		<h3>[method:null registerCallbackCompletedLoading]( [page:Function callbackCompletedLoading] )</h3>
-		<div>
-			[page:Function callbackCompletedLoading] — 	Callback function for described functionality
-		</div>
-		<div>
-			Register callback function that is called once loading of the complete model is completed.
-		</div>
-
-
-		<h3>[method:null registerCallbackProgress]( [page:Function callbackProgress] )</h3>
-		<div>
-			[page:Function callbackProgress] — 	Callback function for described functionality
-		</div>
-		<div>
-			Register callback function that is invoked by internal function "_announceProgress" to print feedback.
-		</div>
-
-
-		<h3>[method:null registerCallbackMaterialsLoaded]( [page:Function callbackMaterialsLoaded] )</h3>
-		<div>
-			[page:Function callbackMaterialsLoaded] — 	Callback function for described functionality
-		</div>
-		<div>
-			Register callback function that is called once materials have been loaded. It allows to alter and return materials.
-		</div>
-
-
-		<h3>[method:null registerCallbackMeshLoaded]( [page:Function callbackMeshLoaded] )</h3>
-		<div>
-			[page:Function callbackMeshLoaded] — 	Callback function for described functionality
-		</div>
-		<div>
-			Register callback function that is called every time a mesh was loaded. Use [page:WWOBJLoader2.LoadedMeshUserOverride] for alteration instructions (geometry, material or disregard mesh).
-		</div>
-
-		<h3>[method:null registerCallbackErrorWhileLoading]( [page:Function callbackErrorWhileLoading] )</h3>
-		<div>
-			[page:Function callbackErrorWhileLoading] — 	Callback function for described functionality
-		</div>
-		<div>
-			Register callback function that is called to report an error that prevented loading.
-		</div>
-
-
-		<h3>[method:null clearAllCallbacks]()</h3>
-		<div>
-			Clears all registered callbacks.
-		</div>
-
-
-		<h2>Sub-Classes</h2>
-		<br>
-		<a name="PrepDataArrayBuffer"></a><h1>PrepDataArrayBuffer</h1>
-		<h2>Constructor</h2>
-
-		<h3>PrepDataArrayBuffer( [page:String modelName], [page:Uint8Array objAsArrayBuffer], [page:String pathTexture], [page:String mtlAsString] )</h3>
-		<div>
-			[page:String modelName] — Overall name of the model<br>
-			[page:Uint8Array objAsArrayBuffer] — OBJ file content as ArrayBuffer<br>
-			[page:String pathTexture] — Path to texture files<br>
-			[page:String mtlAsString] — MTL file content as string
-		</div>
-		<div>
-			Instruction to configure [page:WWOBJLoader2.prepareRun] to load OBJ from given ArrayBuffer and MTL from given String.
-		</div>
-
-		<h2>Methods</h2>
-
-		<h3>[method:PrepDataCallbacks getCallbacks]()</h3>
-		<div>
-			Returns all callbacks as [page:WWOBJLoader2.PrepDataCallbacks].
-		</div>
-
-
-		<h3>[method:null setRequestTerminate]( [page:Boolean requestTerminate] )</h3>
-		<div>
-			[page:Boolean requestTerminate] — Default is false
-		</div>
-		<div>
-			Request termination of web worker and free local resources after execution.
-		</div>
-
-
-		<h3>[method:null setSceneGraphBaseNode]( [page:THREE.Object3D sceneGraphBaseNode] )</h3>
-		<div>
-			[page:Object3D sceneGraphBaseNode] — Scene graph object
-		</div>
-		<div>
-			[page:Object3D] where meshes will be attached.
-		</div>
-
-
-		<h3>[method:null setStreamMeshes]( [page:Boolean streamMeshes] )</h3>
-		<div>
-			[page:Boolean streamMeshes] — Default is true
-		</div>
-		<div>
-			Singles meshes are directly integrated into scene when loaded or later.
-		</div>
-		<br>
-		<br>
-
-
-		<a name="PrepDataFile"></a><h1>PrepDataFile</h1>
-		<h2>Constructor</h2>
-
-		<h3>PrepDataFile( [page:String modelName], [page:String pathObj], [page:String fileObj], [page:String pathTexture], [page:String fileMtl] )</h3>
-		<div>
-			[page:String modelName] — Overall name of the model<br>
-			[page:String pathObj] — Path to OBJ file<br>
-			[page:String fileObj] — OBJ file name<br>
-			[page:String pathTexture] — Path to texture files<br>
-			[page:String fileMtl] — MTL file name
-		</div>
-		<div>
-			Instruction to configure [page:WWOBJLoader2.prepareRun] to load OBJ and MTL from files.
-		</div>
-
-		<h2>Methods</h2>
-
-		<h3>[method:PrepDataCallbacks getCallbacks]()</h3>
-		<div>
-			Returns all callbacks as [page:WWOBJLoader2.PrepDataCallbacks].
-		</div>
-
-
-		<h3>[method:null setRequestTerminate]( [page:Boolean requestTerminate] )</h3>
-		<div>
-			[page:Boolean requestTerminate] — Default is false
-		</div>
-		<div>
-			Request termination of web worker and free local resources after execution.
-		</div>
-
-
-		<h3>[method:null setSceneGraphBaseNode]( [page:THREE.Object3D sceneGraphBaseNode] )</h3>
-		<div>
-			[page:Object3D sceneGraphBaseNode] — Scene graph object
-		</div>
-		<div>
-			[page:Object3D] where meshes will be attached.
-		</div>
-
-
-		<h3>[method:null setStreamMeshes]( [page:Boolean streamMeshes] )</h3>
-		<div>
-			[page:Boolean streamMeshes] — Default is true
-		</div>
-		<div>
-			Singles meshes are directly integrated into scene when loaded or later.
-		</div>
-		<br>
-		<br>
-
-
-		<a name="PrepDataCallbacks"></a><h1>PrepDataCallbacks</h1>
-		<h2>Constructor</h2>
-
-		<h3>PrepDataCallbacks()</h3>
-		<div>
-			Callbacks utilized by functions working with [page:WWOBJLoader2.PrepDataArrayBuffer] or [page:WWOBJLoader2.PrepDataFile].
-		</div>
-
-		<h2>Methods</h2>
-
-		<h3>[method:null registerCallbackCompletedLoading]( [page:Function callbackCompletedLoading] )</h3>
-		<div>
-			[page:Function callbackCompletedLoading] — Callback function for described functionality
-		</div>
-		<div>
-			Register callback function that is called once loading of the complete model is completed.
-		</div>
-
-
-		<h3>[method:null registerCallbackProgress]( [page:Function callbackProgress] )</h3>
-		<div>
-			[page:Function callbackProgress] — Callback function for described functionality
-		</div>
-		<div>
-			Register callback function that is invoked by internal function "_announceProgress" to print feedback.
-		</div>
-
-
-		<h3>[method:null registerCallbackErrorWhileLoading]( [page:Function callbackErrorWhileLoading] )</h3>
-		<div>
-			[page:Function callbackErrorWhileLoading] — Callback function for described functionality
-		</div>
-		<div>
-			Report if an error prevented loading.
-		</div>
-
-
-		<h3>[method:null registerCallbackMaterialsLoaded]( [page:Function callbackMaterialsLoaded] )</h3>
-		<div>
-			[page:Function callbackMaterialsLoaded] — Callback function for described functionality
-		</div>
-		<div>
-			Register callback function that is called once materials have been loaded. It allows to alter and return materials.
-		</div>
-
-
-		<h3>[method:null registerCallbackMeshLoaded]( [page:Function callbackMeshLoaded] )</h3>
-		<div>
-			[page:Function callbackMeshLoaded] — Callback function for described functionality
-		</div>
-		<div>
-			Register callback function that is called every time a mesh was loaded. Use [page:WWOBJLoader2.LoadedMeshUserOverride] for alteration instructions (geometry, material or disregard mesh).
-		</div>
-		<br>
-		<br>
-
-
-		<a name="LoadedMeshUserOverride"></a><h1>LoadedMeshUserOverride</h1>
-		<h2>Constructor</h2>
-
-		<h3>LoadedMeshUserOverride( [page:Boolean disregardMesh], [page:THREE.BufferGeometry bufferGeometry], [page:THREE.Material material] )</h3>
-		<div>
-			[page:Boolean disregardMesh] — Tell [page:WWOBJLoader2] to completely disregard this mesh<br>
-			[page:BufferGeometry bufferGeometry] — The [page:BufferGeometry] to be used<br>
-			[page:Material material] — The [page:Material] to be used
-		</div>
-		<div>
-			Object to return by THREE.OBJLoader2.WWOBJLoader2.callbacks.meshLoaded. Used to adjust bufferGeometry or material or prevent complete loading of mesh.
-		</div>
-		<br>
-		<br>
-
-
-		<a name="WWOBJLoader2Director"></a><h1>WWOBJLoader2Director</h1>
-		<h2>Constructor</h2>
-
-		<h3>WWOBJLoader2Director()</h3>
-		<div>
-			Orchestrate loading of multiple OBJ files/data from an instruction queue with a configurable amount of workers (1-16).<br>
-			Workflow:<br>
-				prepareWorkers<br>
-				enqueueForRun<br>
-				processQueue<br>
-				deregister
-		</div>
-
-		<h3>[method:null prepareWorkers]( [page:WWOBJLoader2.PrepDataCallbacks globalCallbacks], [page:Number maxQueueSize], [page:Number maxWebWorkers] )</h3>
-		<div>
-			[page:WWOBJLoader2.PrepDataCallbacks globalCallbacks] — Register global callbacks used by all web workers<br>
-			[page:Number maxQueueSize] — Set the maximum size of the instruction queue (1-1024)<br>
-			[page:Number maxWebWorkers] — Set the maximum amount of workers (1-16)
-		</div>
-		<div>
-			Create or destroy workers according limits. Set the name and register callbacks for dynamically created web workers.
-		</div>
-
-
-		<h3>[method:null enqueueForRun]( [page:Object runParams] )</h3>
-		<div>
-			[page:Object runParams] — Either [page:WWOBJLoader2.PrepDataArrayBuffer] or [page:WWOBJLoader2.PrepDataFile]
-		</div>
-		<div>
-			Store run instructions in internal instructionQueue.
-		</div>
-
-
-		<h3>[method:null processQueue]()</h3>
-		<div>
-			Process the instructionQueue until it is depleted.
-		</div>
-
-
-		<h3>[method:null deregister]()</h3>
-		<div>
-			Terminate all workers
-		</div>
-
-
-		<h3>[method:null getMaxQueueSize]()</h3>
-		<div>
-			Returns the maximum length of the instruction queue.
-		</div>
-
-
-		<h3>[method:null getMaxWebWorkers]()</h3>
-		<div>
-			Returns the maximum number of workers.
-		</div>
-
-
-		<h3>[method:null setCrossOrigin]( [page:String crossOrigin] )</h3>
-		<div>
-			[page:String crossOrigin] — CORS value
-		</div>
-		<div>
-			Sets the CORS string to be used.
-		</div>
-
-
-
-		<h2>Source</h2>
-
-		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/loaders/OBJLoader2.js examples/js/loaders/OBJLoader2.js]
-
-	</body>
-</html>

+ 2 - 2
docs/index.html

@@ -320,7 +320,7 @@
 				if(hash) {
 
 					iframe.src = splitHash[ 0 ] + '.html' + splitHash[ 1 ];
-					subtitle = ' - ' + titles[ splitHash[ 0 ] ] + splitHash[ 1 ];
+					subtitle = titles[ splitHash[ 0 ] ] + splitHash[ 1 ] + ' - ';
 
 				} else {
 
@@ -330,7 +330,7 @@
 				}
 
 				document.body.replaceChild( iframe, oldIframe );
-				document.title = 'three.js docs' + subtitle;
+				document.title = subtitle + 'three.js docs';
 
 			}
 

+ 18 - 9
docs/list.js

@@ -103,7 +103,6 @@ var list = {
 		},
 
 		"Extras": {
-			"CurveUtils": "api/extras/CurveUtils",
 			"SceneUtils": "api/extras/SceneUtils",
 			"ShapeUtils": "api/extras/ShapeUtils"
 		},
@@ -112,6 +111,7 @@ var list = {
 			"Curve": "api/extras/core/Curve",
 			"CurvePath": "api/extras/core/CurvePath",
 			"Font": "api/extras/core/Font",
+			"Interpolations": "api/extras/core/Interpolations",
 			"Path": "api/extras/core/Path",
 			"Shape": "api/extras/core/Shape",
 			"ShapePath": "api/extras/core/ShapePath"
@@ -181,14 +181,16 @@ var list = {
 
 		"Helpers": {
 			"ArrowHelper": "api/helpers/ArrowHelper",
-			"AxisHelper": "api/helpers/AxisHelper",
+			"AxesHelper": "api/helpers/AxesHelper",
 			"BoxHelper": "api/helpers/BoxHelper",
+			"Box3Helper": "api/helpers/Box3Helper",
 			"CameraHelper": "api/helpers/CameraHelper",
 			"DirectionalLightHelper": "api/helpers/DirectionalLightHelper",
 			"FaceNormalsHelper": "api/helpers/FaceNormalsHelper",
 			"GridHelper": "api/helpers/GridHelper",
 			"PolarGridHelper": "api/helpers/PolarGridHelper",
 			"HemisphereLightHelper": "api/helpers/HemisphereLightHelper",
+			"PlaneHelper": "api/helpers/PlaneHelper",
 			"PointLightHelper": "api/helpers/PointLightHelper",
 			"RectAreaLightHelper": "api/helpers/RectAreaLightHelper",
 			"SkeletonHelper": "api/helpers/SkeletonHelper",
@@ -209,7 +211,6 @@ var list = {
 		"Lights / Shadows": {
 			"DirectionalLightShadow": "api/lights/shadows/DirectionalLightShadow",
 			"LightShadow": "api/lights/shadows/LightShadow",
-			"RectAreaLightShadow": "api/lights/shadows/RectAreaLightShadow",
 			"SpotLightShadow": "api/lights/shadows/SpotLightShadow"
 		},
 
@@ -333,27 +334,35 @@ var list = {
 
 	"Examples": {
 
+		"Controls": {
+			"OrbitControls": "examples/controls/OrbitControls"
+		},
+
 		"Geometries": {
 			"ConvexBufferGeometry": "examples/geometries/ConvexBufferGeometry",
-			"ConvexGeometry": "examples/geometries/ConvexGeometry"
+			"ConvexGeometry": "examples/geometries/ConvexGeometry",
+			"DecalGeometry": "examples/geometries/DecalGeometry"
 		},
 
 		"Loaders": {
 			"BabylonLoader": "examples/loaders/BabylonLoader",
-			"ColladaLoader": "examples/loaders/ColladaLoader",
 			"GLTFLoader": "examples/loaders/GLTFLoader",
 			"MTLLoader": "examples/loaders/MTLLoader",
 			"OBJLoader": "examples/loaders/OBJLoader",
 			"OBJLoader2": "examples/loaders/OBJLoader2",
-			"WWOBJLoader2": "examples/loaders/WWOBJLoader2",
+			"LoaderSupport": "examples/loaders/LoaderSupport",
 			"PCDLoader": "examples/loaders/PCDLoader",
 			"PDBLoader": "examples/loaders/PDBLoader",
 			"SVGLoader": "examples/loaders/SVGLoader",
-			"TGALoader": "examples/loaders/TGALoader"
+			"TGALoader": "examples/loaders/TGALoader",
+			"PRWMLoader": "examples/loaders/PRWMLoader"
+		},
+
+		"Exporters": {
+			"GLTFExporter": "examples/exporters/GLTFExporter"
 		},
 
 		"Plugins": {
-			"CombinedCamera": "examples/cameras/CombinedCamera",
 			"LookupTable": "examples/Lut",
 			"SpriteCanvasMaterial": "examples/SpriteCanvasMaterial"
 		},
@@ -391,4 +400,4 @@ var list = {
 
 	}
 
-}
+};

+ 2 - 2
docs/manual/buildTools/Testing-with-NPM.html

@@ -106,7 +106,7 @@ $ npm install mocha --save-dev
 				<li>
 					Rerun the test with
 					<code>
-						$ npm test.
+						$ npm test
 					</code>
 
 					This should now succeed, reporting 0 passing (1ms)
@@ -144,7 +144,7 @@ $ npm install three --save-dev
 				<li>
 					Mocha will look for tests in test/, so let's
 					<code>
-					$ mkdir test.
+					$ mkdir test
 					</code>
 				</li>
 

+ 7 - 3
docs/manual/introduction/Creating-a-scene.html

@@ -40,7 +40,7 @@
 
 		<h2>Creating the scene</h2>
 
-		<div>To actually be able to display anything with three.js, we need three things: A scene, a camera, and a renderer so we can render the scene with the camera.</div>
+		<div>To actually be able to display anything with three.js, we need three things: scene, camera and renderer, so that we can render the scene with camera.</div>
 
 		<code>
 		var scene = new THREE.Scene();
@@ -51,7 +51,11 @@
 		document.body.appendChild( renderer.domElement );
 		</code>
 
-		<div>Let's take a moment to explain what's going on here. We have now set up the scene, our camera and the renderer. There are a few different cameras in three.js. For now, let's use a PerspectiveCamera. The first attribute is the <strong>field of view</strong>.</div>
+		<div>Let's take a moment to explain what's going on here. We have now set up the scene, our camera and the renderer.</div>
+
+		<div>There are a few different cameras in three.js. For now, let's use a <strong>PerspectiveCamera</strong>.</div>
+
+		<div>The first attribute is the <strong>field of view</strong>. FOV is the extent of the scene that is seen on the display at any given moment. The value is in degrees.</div>
 
 		<div>The second one is the <strong>aspect ratio</strong>. You almost always want to use the width of the element divided by the height, or you'll get the same result as when you play old movies on a widescreen TV - the image looks squished.</div>
 
@@ -96,7 +100,7 @@
 		animate();
 		</code>
 
-		<div>This will create a loop that causes the renderer to draw the scene 60 times per second. If you're new to writing games in the browser, you might say "why don't we just  create a <strong>setInterval</strong>? The thing is - we could, but <strong>requestAnimationFrame</strong> has a number of advantages. Perhaps the most important one is that it pauses when the user navigates to another browser tab, hence not wasting their precious processing power and battery life.</div>
+		<div>This will create a loop that causes the renderer to draw the scene 60 times per second. If you're new to writing games in the browser, you might say <em>"why don't we just create a setInterval ?"</em> The thing is - we could, but <strong>requestAnimationFrame</strong> has a number of advantages. Perhaps the most important one is that it pauses when the user navigates to another browser tab, hence not wasting their precious processing power and battery life.</div>
 
 		<h2>Animating the cube</h2>
 

+ 2 - 2
docs/manual/introduction/Import-via-modules.html

@@ -19,7 +19,7 @@
 			</ul>
 		</div>
 
-		<div>Using a dependency manager like npm avoids these caveats by allowing you to simply download and import your desired version of the libarary onto your machine.</div>
+		<div>Using a dependency manager like npm avoids these caveats by allowing you to simply download and import your desired version of the library onto your machine.</div>
 
 		<h2>Installation via npm</h2>
 
@@ -65,7 +65,7 @@
 		<h2>Caveats</h2>
 
 		<div>
-			Currenlty it's not possible to import the files within the "examples/js" directroy in this way.
+			Currently it's not possible to import the files within the "examples/js" directory in this way.
 			This is due to some of the files relying on global namespace pollution of THREE. For more information see <a href="https://github.com/mrdoob/three.js/issues/9562" target="_blank">Transform `examples/js` to support modules #9562</a>.
 		</div>
 	</body>

+ 1 - 1
docs/manual/introduction/Useful-links.html

@@ -47,7 +47,7 @@
 				[link:http://blog.cjgammon.com/ Collection of tutorials] by [link:http://www.cjgammon.com/ CJ Gammon].
 			</li>
 			<li>
-				<a href="https://medium.com/@soffritti.pierfrancesco/glossy-spheres-in-three-js-bfd2785d4857">Glossy spheres in three.js</a>.
+				[link:https://medium.com/@soffritti.pierfrancesco/glossy-spheres-in-three-js-bfd2785d4857] Glossy spheres in three.js.
 			</li>
 		 <li>
 			 [link:https://www.udacity.com/course/cs291 Interactive 3D Graphics] - a free course on Udacity that teaches the fundamentals of 3D Graphics,

+ 2 - 2
docs/page.js

@@ -24,7 +24,7 @@ if ( !window.frameElement && window.location.protocol !== 'file:' ) {
 }
 
 
-var onDocumentLoad = function ( event ) {
+function onDocumentLoad( event ) {
 
 	var path;
 	var pathname = window.location.pathname;
@@ -69,7 +69,7 @@ var onDocumentLoad = function ( event ) {
 	text = text.replace( /\[example:([\w\_]+)\]/gi, "[example:$1 $1]" ); // [example:name] to [example:name title]
 	text = text.replace( /\[example:([\w\_]+) ([\w\:\/\.\-\_ \s]+)\]/gi, "<a href=\"../examples/#$1\"  target=\"_blank\">$2</a>" ); // [example:name title]
 
-	
+
 	document.body.innerHTML = text;
 
 	// handle code snippets formatting

+ 11 - 5
editor/index.html

@@ -35,7 +35,7 @@
 		<script src="../examples/js/loaders/AMFLoader.js"></script>
 		<script src="../examples/js/loaders/AWDLoader.js"></script>
 		<script src="../examples/js/loaders/BabylonLoader.js"></script>
-		<script src="../examples/js/loaders/ColladaLoader2.js"></script>
+		<script src="../examples/js/loaders/ColladaLoader.js"></script>
 		<script src="../examples/js/loaders/FBXLoader.js"></script>
 		<script src="../examples/js/loaders/GLTFLoader.js"></script>
 		<script src="../examples/js/loaders/KMZLoader.js"></script>
@@ -177,6 +177,8 @@
 			window.URL = window.URL || window.webkitURL;
 			window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;
 
+			const IS_MAC = navigator.platform.toUpperCase().indexOf( 'MAC' ) >= 0;
+
 			Number.prototype.format = function (){
 				return this.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
 			};
@@ -325,13 +327,17 @@
 
 					case 90: // Register Ctrl-Z for Undo, Ctrl-Shift-Z for Redo
 
-						if ( event.ctrlKey && event.shiftKey ) {
+						if ( IS_MAC ? event.metaKey : event.ctrlKey ) {
+
+							if ( event.shiftKey ) {
+
+								editor.redo();
 
-							editor.redo();
+							} else {
 
-						} else if ( event.ctrlKey ) {
+								editor.undo();
 
-							editor.undo();
+							}
 
 						}
 

+ 4 - 0
editor/js/Config.js

@@ -8,11 +8,15 @@ var Config = function ( name ) {
 		'autosave': true,
 		'theme': 'css/light.css',
 
+		'project/title': '',
+		'project/editable': false,
+
 		'project/renderer': 'WebGLRenderer',
 		'project/renderer/antialias': true,
 		'project/renderer/gammaInput': false,
 		'project/renderer/gammaOutput': false,
 		'project/renderer/shadows': true,
+
 		'project/vr': false,
 
 		'settings/history': false

+ 19 - 56
editor/js/Menubar.Add.js

@@ -56,7 +56,7 @@ Menubar.Add = function ( editor ) {
 	option.setTextContent( 'Plane' );
 	option.onClick( function () {
 
-		var geometry = new THREE.PlaneBufferGeometry( 2, 2 );
+		var geometry = new THREE.PlaneBufferGeometry( 1, 1, 1, 1 );
 		var material = new THREE.MeshStandardMaterial();
 		var mesh = new THREE.Mesh( geometry, material );
 		mesh.name = 'Plane ' + ( ++ meshCount );
@@ -73,7 +73,7 @@ Menubar.Add = function ( editor ) {
 	option.setTextContent( 'Box' );
 	option.onClick( function () {
 
-		var geometry = new THREE.BoxBufferGeometry( 1, 1, 1 );
+		var geometry = new THREE.BoxBufferGeometry( 1, 1, 1, 1, 1, 1 );
 		var mesh = new THREE.Mesh( geometry, new THREE.MeshStandardMaterial() );
 		mesh.name = 'Box ' + ( ++ meshCount );
 
@@ -89,10 +89,7 @@ Menubar.Add = function ( editor ) {
 	option.setTextContent( 'Circle' );
 	option.onClick( function () {
 
-		var radius = 1;
-		var segments = 32;
-
-		var geometry = new THREE.CircleBufferGeometry( radius, segments );
+		var geometry = new THREE.CircleBufferGeometry( 1, 8, 0, Math.PI * 2 );
 		var mesh = new THREE.Mesh( geometry, new THREE.MeshStandardMaterial() );
 		mesh.name = 'Circle ' + ( ++ meshCount );
 
@@ -108,14 +105,7 @@ Menubar.Add = function ( editor ) {
 	option.setTextContent( 'Cylinder' );
 	option.onClick( function () {
 
-		var radiusTop = 1;
-		var radiusBottom = 1;
-		var height = 2;
-		var radiusSegments = 32;
-		var heightSegments = 1;
-		var openEnded = false;
-
-		var geometry = new THREE.CylinderBufferGeometry( radiusTop, radiusBottom, height, radiusSegments, heightSegments, openEnded );
+		var geometry = new THREE.CylinderBufferGeometry( 1, 1, 1, 8, 1, false, 0, Math.PI * 2 );
 		var mesh = new THREE.Mesh( geometry, new THREE.MeshStandardMaterial() );
 		mesh.name = 'Cylinder ' + ( ++ meshCount );
 
@@ -131,15 +121,7 @@ Menubar.Add = function ( editor ) {
 	option.setTextContent( 'Sphere' );
 	option.onClick( function () {
 
-		var radius = 1;
-		var widthSegments = 32;
-		var heightSegments = 16;
-		var phiStart = 0;
-		var phiLength = Math.PI * 2;
-		var thetaStart = 0;
-		var thetaLength = Math.PI;
-
-		var geometry = new THREE.SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength );
+		var geometry = new THREE.SphereBufferGeometry( 1, 8, 6, 0, Math.PI * 2, 0, Math.PI );
 		var mesh = new THREE.Mesh( geometry, new THREE.MeshStandardMaterial() );
 		mesh.name = 'Sphere ' + ( ++ meshCount );
 
@@ -155,10 +137,7 @@ Menubar.Add = function ( editor ) {
 	option.setTextContent( 'Icosahedron' );
 	option.onClick( function () {
 
-		var radius = 1;
-		var detail = 2;
-
-		var geometry = new THREE.IcosahedronGeometry( radius, detail );
+		var geometry = new THREE.IcosahedronGeometry( 1, 0 );
 		var mesh = new THREE.Mesh( geometry, new THREE.MeshStandardMaterial() );
 		mesh.name = 'Icosahedron ' + ( ++ meshCount );
 
@@ -174,13 +153,7 @@ Menubar.Add = function ( editor ) {
 	option.setTextContent( 'Torus' );
 	option.onClick( function () {
 
-		var radius = 2;
-		var tube = 1;
-		var radialSegments = 32;
-		var tubularSegments = 12;
-		var arc = Math.PI * 2;
-
-		var geometry = new THREE.TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc );
+		var geometry = new THREE.TorusBufferGeometry( 1, 0.4, 8, 6, Math.PI * 2 );
 		var mesh = new THREE.Mesh( geometry, new THREE.MeshStandardMaterial() );
 		mesh.name = 'Torus ' + ( ++ meshCount );
 
@@ -196,14 +169,7 @@ Menubar.Add = function ( editor ) {
 	option.setTextContent( 'TorusKnot' );
 	option.onClick( function () {
 
-		var radius = 2;
-		var tube = 0.8;
-		var tubularSegments = 64;
-		var radialSegments = 12;
-		var p = 2;
-		var q = 3;
-
-		var geometry = new THREE.TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q );
+		var geometry = new THREE.TorusKnotBufferGeometry( 1, 0.4, 64, 8, 2, 3 );
 		var mesh = new THREE.Mesh( geometry, new THREE.MeshStandardMaterial() );
 		mesh.name = 'TorusKnot ' + ( ++ meshCount );
 
@@ -250,22 +216,19 @@ Menubar.Add = function ( editor ) {
 
 		var points = [
 			new THREE.Vector2( 0, 0 ),
-			new THREE.Vector2( 4, 0 ),
-			new THREE.Vector2( 3.5, 0.5 ),
-			new THREE.Vector2( 1, 0.75 ),
-			new THREE.Vector2( 0.8, 1 ),
-			new THREE.Vector2( 0.8, 4 ),
-			new THREE.Vector2( 1, 4.2 ),
-			new THREE.Vector2( 1.4, 4.8 ),
-			new THREE.Vector2( 2, 5 ),
-			new THREE.Vector2( 2.5, 5.4 ),
-			new THREE.Vector2( 3, 12 )
+			new THREE.Vector2( 0.4, 0 ),
+			new THREE.Vector2( 0.35, 0.05 ),
+			new THREE.Vector2( 0.1, 0.075 ),
+			new THREE.Vector2( 0.08, 0.1 ),
+			new THREE.Vector2( 0.08, 0.4 ),
+			new THREE.Vector2( 0.1, 0.42 ),
+			new THREE.Vector2( 0.14, 0.48 ),
+			new THREE.Vector2( 0.2, 0.5 ),
+			new THREE.Vector2( 0.25, 0.54 ),
+			new THREE.Vector2( 0.3, 1.2 )
 		];
-		var segments = 20;
-		var phiStart = 0;
-		var phiLength = 2 * Math.PI;
 
-		var geometry = new THREE.LatheBufferGeometry( points, segments, phiStart, phiLength );
+		var geometry = new THREE.LatheBufferGeometry( points, 12, 0, Math.PI * 2 );
 		var mesh = new THREE.Mesh( geometry, new THREE.MeshStandardMaterial( { side: THREE.DoubleSide } ) );
 		mesh.name = 'Lathe ' + ( ++ meshCount );
 

+ 24 - 1
editor/js/Menubar.File.js

@@ -14,6 +14,8 @@ Menubar.File = function ( editor ) {
 
 	//
 
+	var config = editor.config;
+
 	var container = new UI.Panel();
 	container.setClass( 'menu' );
 
@@ -266,15 +268,19 @@ Menubar.File = function ( editor ) {
 
 		//
 
+		var title = config.getKey( 'project/title' );
+
 		var manager = new THREE.LoadingManager( function () {
 
-			save( zip.generate( { type: 'blob' } ), 'download.zip' );
+			save( zip.generate( { type: 'blob' } ), ( title !== '' ? title : 'untitled' ) + '.zip' );
 
 		} );
 
 		var loader = new THREE.FileLoader( manager );
 		loader.load( 'js/libs/app/index.html', function ( content ) {
 
+			content = content.replace( '<!-- title -->', title );
+
 			var includes = [];
 
 			if ( vr ) {
@@ -285,6 +291,23 @@ Menubar.File = function ( editor ) {
 
 			content = content.replace( '<!-- includes -->', includes.join( '\n\t\t' ) );
 
+			var editButton = '';
+
+			if ( config.getKey( 'project/editable' ) ) {
+
+				editButton = `
+			var button = document.createElement( 'a' );
+			button.href = 'https://threejs.org/editor/#file=' + location.href.split( '/' ).slice( 0, - 1 ).join( '/' ) + '/app.json';
+			button.style.cssText = 'position: absolute; bottom: 20px; right: 20px; padding: 12px 14px; color: #fff; border: 1px solid #fff; border-radius: 4px; text-decoration: none;';
+			button.target = '_blank';
+			button.textContent = 'EDIT';
+			document.body.appendChild( button );
+				`;
+
+			}
+
+			content = content.replace( '/* edit button */', editButton );
+
 			zip.file( 'index.html', content );
 
 		} );

+ 1 - 2
editor/js/Sidebar.Material.js

@@ -510,7 +510,6 @@ Sidebar.Material = function ( editor ) {
 		var object = currentObject;
 
 		var geometry = object.geometry;
-		var material = object.material;
 
 		var previousSelectedSlot = currentMaterialSlot;
 
@@ -518,7 +517,7 @@ Sidebar.Material = function ( editor ) {
 
 		if ( currentMaterialSlot !== previousSelectedSlot ) refreshUI( true );
 
-		material = editor.getObjectMaterial( currentObject, currentMaterialSlot )
+		var material = editor.getObjectMaterial( currentObject, currentMaterialSlot )
 
 		var textureWarning = false;
 		var objectHasUvs = false;

+ 47 - 20
editor/js/Sidebar.Project.js

@@ -21,7 +21,49 @@ Sidebar.Project = function ( editor ) {
 	container.setBorderTop( '0' );
 	container.setPaddingTop( '20px' );
 
-	// class
+	// Title
+
+	var titleRow = new UI.Row();
+	var title = new UI.Input( config.getKey( 'project/title' ) ).setLeft( '100px' ).onChange( function () {
+
+		config.setKey( 'project/title', this.getValue() );
+
+	} );
+
+	titleRow.add( new UI.Text( 'Title' ).setWidth( '90px' ) );
+	titleRow.add( title );
+
+	container.add( titleRow );
+
+	// Editable
+
+	var editableRow = new UI.Row();
+	var editable = new UI.Checkbox( config.getKey( 'project/editable' ) ).setLeft( '100px' ).onChange( function () {
+
+		config.setKey( 'project/editable', this.getValue() );
+
+	} );
+
+	editableRow.add( new UI.Text( 'Editable' ).setWidth( '90px' ) );
+	editableRow.add( editable );
+
+	container.add( editableRow );
+
+	// VR
+
+	var vrRow = new UI.Row();
+	var vr = new UI.Checkbox( config.getKey( 'project/vr' ) ).setLeft( '100px' ).onChange( function () {
+
+		config.setKey( 'project/vr', this.getValue() );
+
+	} );
+
+	vrRow.add( new UI.Text( 'VR' ).setWidth( '90px' ) );
+	vrRow.add( vr );
+
+	container.add( vrRow );
+
+	// Renderer
 
 	var options = {};
 
@@ -55,7 +97,7 @@ Sidebar.Project = function ( editor ) {
 
 	}
 
-	// antialiasing
+	// Renderer / Antialias
 
 	var rendererPropertiesRow = new UI.Row().setMarginLeft( '90px' );
 
@@ -67,7 +109,7 @@ Sidebar.Project = function ( editor ) {
 	} );
 	rendererPropertiesRow.add( rendererAntialias );
 
-	// shadow
+	// Renderer / Shadows
 
 	var rendererShadows = new UI.THREE.Boolean( config.getKey( 'project/renderer/shadows' ), 'shadows' ).onChange( function () {
 
@@ -79,7 +121,7 @@ Sidebar.Project = function ( editor ) {
 
 	rendererPropertiesRow.add( new UI.Break() );
 
-	// gamma input
+	// Renderer / Gamma input
 
 	var rendererGammaInput = new UI.THREE.Boolean( config.getKey( 'project/renderer/gammaInput' ), 'γ input' ).onChange( function () {
 
@@ -89,7 +131,7 @@ Sidebar.Project = function ( editor ) {
 	} );
 	rendererPropertiesRow.add( rendererGammaInput );
 
-	// gamma output
+	// Renderer / Gamma output
 
 	var rendererGammaOutput = new UI.THREE.Boolean( config.getKey( 'project/renderer/gammaOutput' ), 'γ output' ).onChange( function () {
 
@@ -101,21 +143,6 @@ Sidebar.Project = function ( editor ) {
 
 	container.add( rendererPropertiesRow );
 
-	// VR
-
-	var vrRow = new UI.Row();
-	var vr = new UI.Checkbox( config.getKey( 'project/vr' ) ).setLeft( '100px' ).onChange( function () {
-
-		config.setKey( 'project/vr', this.getValue() );
-		// updateRenderer();
-
-	} );
-
-	vrRow.add( new UI.Text( 'VR' ).setWidth( '90px' ) );
-	vrRow.add( vr );
-
-	container.add( vrRow );
-
 	//
 
 	function updateRenderer() {

+ 6 - 26
editor/js/libs/app.js

@@ -24,21 +24,12 @@ var APP = {
 			renderer.setClearColor( 0x000000 );
 			renderer.setPixelRatio( window.devicePixelRatio );
 
-			if ( json.project.gammaInput ) renderer.gammaInput = true;
-			if ( json.project.gammaOutput ) renderer.gammaOutput = true;
+			var project = json.project;
 
-			if ( json.project.shadows ) {
-
-				renderer.shadowMap.enabled = true;
-				// renderer.shadowMap.type = THREE.PCFSoftShadowMap;
-
-			}
-
-			if ( json.project.vr ) {
-
-				renderer.vr.enabled = true;
-
-			}
+			if ( project.gammaInput ) renderer.gammaInput = true;
+			if ( project.gammaOutput ) renderer.gammaOutput = true;
+			if ( project.shadows ) renderer.shadowMap.enabled = true;
+			if ( project.vr ) renderer.vr.enabled = true;
 
 			dom.appendChild( renderer.domElement );
 
@@ -122,18 +113,7 @@ var APP = {
 
 			if ( renderer.vr.enabled ) {
 
-				WEBVR.checkAvailability().catch( function( message ) {
-
-					dom.appendChild( WEBVR.getMessageContainer( message ) );
-
-				} );
-
-				WEBVR.getVRDisplay( function ( device ) {
-
-					renderer.vr.setDevice( device );
-					dom.appendChild( WEBVR.getButton( device, renderer.domElement ) );
-
-				} );
+				dom.appendChild( WEBVR.createButton( renderer ) );
 
 			}
 

+ 4 - 27
editor/js/libs/app/index.html

@@ -1,31 +1,18 @@
 <!DOCTYPE html>
 <html lang="en">
 	<head>
-		<title>three.js</title>
+		<title><!-- title --></title>
 		<meta charset="utf-8">
 		<meta name="generator" content="Three.js Editor">
 		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
 		<style>
 			body {
-				font-family: Helvetica, Arial, sans-serif;
-				font-size: 12px;
+				font-family: sans-serif;
+				font-size: 13px;
 				background-color: #000;
 				margin: 0px;
 				overflow: hidden;
 			}
-			#edit {
-				position: absolute;
-				bottom: 20px;
-				right: 20px;
-				padding: 8px;
-				text-decoration: none;
-				background-color: #fff;
-				color: #555;
-				opacity: 0.5;
-			}
-			#edit:hover {
-				opacity: 1;
-			}
 		</style>
 	</head>
 	<body ontouchstart="">
@@ -47,18 +34,8 @@
 				window.addEventListener( 'resize', function () {
 					player.setSize( window.innerWidth, window.innerHeight );
 				} );
-
-				if ( location.search === '?edit' ) {
-					var button = document.createElement( 'a' );
-					button.id = 'edit';
-					button.href = 'https://threejs.org/editor/#file=' + location.href.split( '/' ).slice( 0, - 1 ).join( '/' ) + '/app.json';
-					button.target = '_blank';
-					button.textContent = 'EDIT';
-					document.body.appendChild( button );
-				}
-
 			} );
-
+			/* edit button */
 		</script>
 	</body>
 </html>

+ 1 - 161
editor/js/libs/tern-threejs/threejs.js

@@ -746,114 +746,6 @@
       "!doc": "Represents a lookup table for colormaps. It is used to determine the color values from a range of data values.",
       "!type": "fn(colormap, numberOfColors)"
     },
-    "CombinedCamera": {
-      "!url": "http://threejs.org/docs/#Reference/examples/cameras/CombinedCamera",
-      "prototype": {
-        "!proto": "THREE.Camera.prototype",
-        "fov": {
-          "!type": "number",
-          "!doc": "Gets or sets the camera frustum vertical field of view in perspective view."
-        },
-        "left": {
-          "!type": "number",
-          "!doc": "Gets or sets the camera frustum left plane in orthographic view."
-        },
-        "right": {
-          "!type": "number",
-          "!doc": "Gets or sets the camera frustum right plane in orthographic view."
-        },
-        "top": {
-          "!type": "number",
-          "!doc": "Gets or sets the camera frustum top plane in orthographic view."
-        },
-        "bottom": {
-          "!type": "number",
-          "!doc": "Gets or sets the camera frustum bottom plane in orthographic view."
-        },
-        "zoom": {
-          "!type": "number",
-          "!doc": "Gets or sets the zoom factor of the camera."
-        },
-        "near": {
-          "!type": "number",
-          "!doc": "Gets camera frustum near plane."
-        },
-        "far": {
-          "!type": "number",
-          "!doc": "Gets camera frustum far plane."
-        },
-        "cameraO": {
-          "!type": "+THREE.OrthographicCamera",
-          "!doc": "Gets or sets the internal OrthographicCamera used as camera."
-        },
-        "cameraP": {
-          "!type": "+THREE.PerspectiveCamera",
-          "!doc": "Gets or sets the internal PerspectiveCamera used as camera."
-        },
-        "inOrthographicMode": {
-          "!type": "boolean",
-          "!doc": "Gets whether the combinedCamera is in Orthographic Mode."
-        },
-        "inPerspectiveMode": {
-          "!type": "boolean",
-          "!doc": "Gets whether the combinedCamera is in Perspective Mode."
-        },
-        "setFov": {
-          "!type": "fn(fov: number)",
-          "!doc": "sets the camera frustum vertical field of view in perspective view."
-        },
-        "setZoom": {
-          "!type": "fn(zoom: number)",
-          "!doc": "Sets the zoomfactor."
-        },
-        "setLens": {
-          "!type": "fn(focalLength: number, frameHeight: number)",
-          "!doc": "Sets the fov based on lens data."
-        },
-        "toFrontView": {
-          "!type": "fn()",
-          "!doc": "Sets the camera to view the front of the target."
-        },
-        "toBackView": {
-          "!type": "fn()",
-          "!doc": "Sets the camera to view the back of the target."
-        },
-        "toLeftView": {
-          "!type": "fn()",
-          "!doc": "Sets the camera to view the left of the target."
-        },
-        "toRightView": {
-          "!type": "fn()",
-          "!doc": "Sets the camera to view the right of the target."
-        },
-        "toTopView": {
-          "!type": "fn()",
-          "!doc": "Sets the camera to view the top."
-        },
-        "toBottomView": {
-          "!type": "fn()",
-          "!doc": "Sets the camera to view the bottom."
-        },
-        "setSize": {
-          "!type": "fn(width: number, height: number)",
-          "!doc": "Sets the size of the orthographic view."
-        },
-        "toOrthographic": {
-          "!type": "fn()",
-          "!doc": "Change the camera to orthographic view."
-        },
-        "toPerspective": {
-          "!type": "fn()",
-          "!doc": "Change the camera to Perspective view."
-        },
-        "updateProjectionMatrix": {
-          "!type": "fn()",
-          "!doc": "Updates the ProjectionMatrix."
-        }
-      },
-      "!doc": "A general purpose camera, for setting FOV, Lens Focal Length,\n \t\tand switching between perspective and orthographic views easily.\n \t\tUse this only if you do not wish to manage\n \t\tboth an Orthographic and Perspective Camera",
-      "!type": "fn(width: number, height: number, fov: number, near: number, far: number, orthoNear: number, orthoFar: number)"
-    },
     "FontUtils": {
       "!url": "http://threejs.org/docs/#Reference/extras/FontUtils",
       "prototype": {
@@ -1032,34 +924,10 @@
           "!type": "boolean",
           "!doc": "todo"
         },
-        "getWrapPoints": {
-          "!type": "fn(oldPts: todo, path: todo) -> todo",
-          "!doc": "todo"
-        },
-        "createPointsGeometry": {
-          "!type": "fn(divisions: todo) -> todo",
-          "!doc": "todo"
-        },
-        "addWrapPath": {
-          "!type": "fn(bendpath: todo) -> todo",
-          "!doc": "todo"
-        },
-        "createGeometry": {
-          "!type": "fn(points: todo) -> todo",
-          "!doc": "todo"
-        },
         "add": {
           "!type": "fn(curve: todo) -> todo",
           "!doc": "todo"
         },
-        "getTransformedSpacedPoints": {
-          "!type": "fn(segments: todo, bends: todo) -> todo",
-          "!doc": "todo"
-        },
-        "createSpacedPointsGeometry": {
-          "!type": "fn(divisions: todo) -> todo",
-          "!doc": "todo"
-        },
         "closePath": {
           "!type": "fn() -> todo",
           "!doc": "todo"
@@ -1071,14 +939,6 @@
         "getCurveLengths": {
           "!type": "fn() -> todo",
           "!doc": "todo"
-        },
-        "getTransformedPoints": {
-          "!type": "fn(segments: todo, bends: todo) -> todo",
-          "!doc": "todo"
-        },
-        "checkConnection": {
-          "!type": "fn() -> todo",
-          "!doc": "todo"
         }
       },
       "!doc": "todo",
@@ -1100,7 +960,7 @@
           "!type": "array",
           "!doc": "The possible actions that define the path."
         },
-        "fromPoints": {
+        "setFromPoints": {
           "!type": "fn(vectors) -> todo",
           "!doc": "Adds to the Path from the points. The first vector defines the offset. After that the lines get defined."
         },
@@ -1152,34 +1012,14 @@
           "!type": "array",
           "!doc": "todo"
         },
-        "makeGeometry": {
-          "!type": "fn(options: todo) -> todo",
-          "!doc": "Convenience method to return ShapeGeometry"
-        },
-        "extractAllPoints": {
-          "!type": "fn(divisions: todo) -> todo",
-          "!doc": "Get points of shape and holes (keypoints based on segments parameter)"
-        },
-        "extrude": {
-          "!type": "fn(options: todo) -> todo",
-          "!doc": "Convenience method to return ExtrudeGeometry"
-        },
         "extractPoints": {
           "!type": "fn(divisions: todo) -> todo",
           "!doc": "todo"
         },
-        "extractAllSpacedPoints": {
-          "!type": "fn(divisions: todo) -> todo",
-          "!doc": "todo"
-        },
         "getPointsHoles": {
           "!type": "fn(divisions: todo) -> todo",
           "!doc": "Get points of holes"
         },
-        "getSpacedPointsHoles": {
-          "!type": "fn(divisions: todo) -> todo",
-          "!doc": "Get points of holes (spaced by regular distance)"
-        }
       },
       "!doc": "Defines a 2d shape plane using paths.",
       "!type": "fn()"

+ 0 - 214
examples/canvas_camera_orthographic2.html

@@ -1,214 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-	<head>
-		<title>three.js canvas - combo camera - orthographic + perspective</title>
-		<meta charset="utf-8">
-		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
-		<style>
-			body {
-				font-family: Monospace;
-				background-color: #f0f0f0;
-				margin: 0px;
-				overflow: hidden;
-				color: purple;
-			}
-
-			a {
-				color: red;
-			}
-		</style>
-	</head>
-	<body>
-
-		<script src="../build/three.js"></script>
-
-		<script src="js/cameras/CombinedCamera.js"></script>
-
-		<script src="js/renderers/Projector.js"></script>
-		<script src="js/renderers/CanvasRenderer.js"></script>
-
-		<script src="js/libs/stats.min.js"></script>
-
-		<div style="position: absolute; top: 10px; width: 100%; text-align: center; ">
-			<a href="http://threejs.org" target="_blank" rel="noopener">three.js</a> - Combo Camera<br>
-			View: <a href="#" onclick="setOrthographic();return false;"> Orthographic</a> |
-				<a href="#" onclick="setPerspective();return false;">Perspective</a><br>
-			Lens: <a href="#" onclick="setLens(12);return false;">12mm</a> |
-				<a href="#" onclick="setLens(16);return false;">16mm</a> |
-				<a href="#" onclick="setLens(24);return false;">24mm</a> |
-				<a href="#" onclick="setLens(35);return false;">35mm</a> |
-				<a href="#" onclick="setLens(50);return false;">50mm</a> |
-				<a href="#" onclick="setLens(60);return false;">60mm</a> |
-				<a href="#" onclick="setLens(85);return false;">85mm</a> |
-				<a href="#" onclick="setLens(105);return false;">105mm</a><br>
-			Fov: <a href="#" onclick="setFov(30);return false;">30°</a> |
-				<a href="#" onclick="setFov(50);return false;">50°</a> |
-				<a href="#" onclick="setFov(70);return false;">70°</a> |
-				<a href="#" onclick="setFov(100);return false;">100°</a><br>
-			Zoom: <a href="#" onclick="camera.setZoom(0.5);return false;">0.5x</a> |
-					<a href="#" onclick="camera.setZoom(1);return false;">1x</a> |
-					<a href="#" onclick="camera.setZoom(2);return false;">2x</a> |
-
-				<br/>
-			Views: <a href="#" onclick="camera.toTopView();lookAtScene=false;return false;">Top view</a> |
-				<a href="#" onclick="camera.toBottomView();lookAtScene=false;return false;">Bottom view</a> |
-				<a href="#" onclick="camera.toLeftView();lookAtScene=false;return false;">Left view</a> |
-				<a href="#" onclick="camera.toRightView();lookAtScene=false;return false;">Right view</a> |
-				<a href="#" onclick="camera.toFrontView();lookAtScene=false;return false;">Front view</a> |
-				<a href="#" onclick="camera.toBackView();lookAtScene=false;return false;">Back view</a> |
-				<a href="#" onclick="lookAtScene=true;return false;">Look at Scene</a>
-				<br/>
-			<div id="fov"></div>
-		</div>
-
-
-
-		<script>
-
-			var container, stats;
-			var camera, scene, renderer;
-			var lookAtScene = true;
-
-			init();
-			animate();
-
-			function setFov( fov ) {
-
-				camera.setFov( fov );
-
-				document.getElementById('fov').innerHTML = 'FOV '+ fov.toFixed(2) +'&deg;' ;
-
-			}
-
-			function setLens( lens ) {
-
-				// try adding a tween effect while changing focal length, and it'd be even cooler!
-
-				var fov = camera.setLens( lens );
-
-				document.getElementById('fov').innerHTML = 'Converted ' + lens + 'mm lens to FOV '+ fov.toFixed(2) +'&deg;' ;
-
-			}
-
-			function setOrthographic() {
-
-				camera.toOrthographic();
-
-				document.getElementById('fov').innerHTML = 'Orthographic mode' ;
-
-			}
-
-			function setPerspective() {
-
-				camera.toPerspective();
-
-				document.getElementById('fov').innerHTML = 'Perspective mode' ;
-
-			}
-
-			function init() {
-
-				container = document.createElement( 'div' );
-				document.body.appendChild( container );
-
-				camera = new THREE.CombinedCamera( window.innerWidth / 2, window.innerHeight / 2, 70, 1, 1000, - 500, 1000 );
-
-				camera.position.x = 200;
-				camera.position.y = 100;
-				camera.position.z = 200;
-
-				scene = new THREE.Scene();
-				scene.background = new THREE.Color( 0xf0f0f0 );
-
-				// Grid
-
-				var gridHelper = new THREE.GridHelper( 1000, 20 );
-				scene.add( gridHelper );
-
-				// Cubes
-
-				var geometry = new THREE.BoxGeometry( 50, 50, 50 );
-				var material = new THREE.MeshLambertMaterial( { color: 0xffffff, overdraw: 0.5 } );
-
-				for ( var i = 0; i < 100; i ++ ) {
-
-					var cube = new THREE.Mesh( geometry, material );
-
-					cube.scale.y = Math.floor( Math.random() * 2 + 1 );
-
-					cube.position.x = Math.floor( ( Math.random() * 1000 - 500 ) / 50 ) * 50 + 25;
-					cube.position.y = ( cube.scale.y * 50 ) / 2;
-					cube.position.z = Math.floor( ( Math.random() * 1000 - 500 ) / 50 ) * 50 + 25;
-
-					scene.add(cube);
-
-				}
-
-				// Lights
-
-				var ambientLight = new THREE.AmbientLight( Math.random() * 0x10 );
-				scene.add( ambientLight );
-
-				var directionalLight = new THREE.DirectionalLight( Math.random() * 0xffffff );
-				directionalLight.position.x = Math.random() - 0.5;
-				directionalLight.position.y = Math.random() - 0.5;
-				directionalLight.position.z = Math.random() - 0.5;
-				directionalLight.position.normalize();
-				scene.add( directionalLight );
-
-				var directionalLight = new THREE.DirectionalLight( Math.random() * 0xffffff );
-				directionalLight.position.x = Math.random() - 0.5;
-				directionalLight.position.y = Math.random() - 0.5;
-				directionalLight.position.z = Math.random() - 0.5;
-				directionalLight.position.normalize();
-				scene.add( directionalLight );
-
-				renderer = new THREE.CanvasRenderer();
-				renderer.setPixelRatio( window.devicePixelRatio );
-				renderer.setSize( window.innerWidth, window.innerHeight );
-				container.appendChild( renderer.domElement );
-
-				stats = new Stats();
-				container.appendChild( stats.dom );
-
-				window.addEventListener( 'resize', onWindowResize, false );
-
-				function onWindowResize(){
-
-					camera.setSize( window.innerWidth, window.innerHeight );
-					camera.updateProjectionMatrix();
-
-					renderer.setSize( window.innerWidth, window.innerHeight );
-
-				}
-
-			}
-
-			//
-
-			function animate() {
-
-				requestAnimationFrame( animate );
-
-				stats.begin();
-				render();
-				stats.end();
-
-			}
-
-			function render() {
-
-				var timer = Date.now() * 0.0001;
-
-				camera.position.x = Math.cos( timer ) * 200;
-				camera.position.z = Math.sin( timer ) * 200;
-				if ( lookAtScene ) camera.lookAt( scene.position );
-
-				renderer.render( scene, camera );
-
-			}
-
-		</script>
-
-	</body>
-</html>

+ 4 - 1
examples/canvas_geometry_panorama.html

@@ -164,7 +164,10 @@
 
 			function onDocumentMouseWheel( event ) {
 
-				camera.fov += event.deltaY * 0.05;
+				var fov = camera.fov + event.deltaY * 0.05;
+
+				camera.fov = THREE.Math.clamp( fov, 10, 75 );
+
 				camera.updateProjectionMatrix();
 
 			}

+ 4 - 1
examples/canvas_geometry_panorama_fisheye.html

@@ -172,7 +172,10 @@
 
 			function onDocumentMouseWheel( event ) {
 
-				camera.fov += event.deltaY * 0.05;
+				var fov = camera.fov + event.deltaY * 0.05;
+
+				camera.fov = THREE.Math.clamp( fov, 10, 75 );
+
 				camera.updateProjectionMatrix();
 
 			}

Some files were not shown because too many files changed in this diff