Mr.doob 8 years ago
parent
commit
8f4ff2abc7
100 changed files with 5185 additions and 3571 deletions
  1. 247 292
      build/three.js
  2. 309 341
      build/three.min.js
  3. 247 292
      build/three.module.js
  4. 350 117
      docs/api/animation/AnimationAction.html
  5. 104 55
      docs/api/animation/AnimationClip.html
  6. 83 74
      docs/api/animation/AnimationMixer.html
  7. 55 44
      docs/api/animation/AnimationObjectGroup.html
  8. 54 51
      docs/api/animation/AnimationUtils.html
  9. 234 151
      docs/api/animation/KeyframeTrack.html
  10. 88 88
      docs/api/animation/PropertyBinding.html
  11. 68 68
      docs/api/animation/PropertyMixer.html
  12. 53 47
      docs/api/animation/tracks/BooleanKeyframeTrack.html
  13. 42 32
      docs/api/animation/tracks/ColorKeyframeTrack.html
  14. 42 32
      docs/api/animation/tracks/NumberKeyframeTrack.html
  15. 49 45
      docs/api/animation/tracks/QuaternionKeyframeTrack.html
  16. 56 49
      docs/api/animation/tracks/StringKeyframeTrack.html
  17. 42 32
      docs/api/animation/tracks/VectorKeyframeTrack.html
  18. 1 1
      docs/api/audio/AudioListener.html
  19. 7 3
      docs/api/cameras/Camera.html
  20. 7 7
      docs/api/core/BufferGeometry.html
  21. 133 133
      docs/api/core/Face3.html
  22. 16 10
      docs/api/core/Object3D.html
  23. 5 2
      docs/api/deprecated/DeprecatedList.html
  24. 4 4
      docs/api/extras/SceneUtils.html
  25. 21 20
      docs/api/extras/core/Curve.html
  26. 7 0
      docs/api/extras/core/Font.html
  27. 1 1
      docs/api/extras/core/Path.html
  28. 145 0
      docs/api/geometries/ExtrudeBufferGeometry.html
  29. 145 145
      docs/api/geometries/ExtrudeGeometry.html
  30. 2 2
      docs/api/geometries/LatheGeometry.html
  31. 26 4
      docs/api/geometries/TextGeometry.html
  32. 3 1
      docs/api/geometries/TubeBufferGeometry.html
  33. 3 1
      docs/api/geometries/TubeGeometry.html
  34. 11 4
      docs/api/helpers/BoxHelper.html
  35. 1 1
      docs/api/helpers/FaceNormalsHelper.html
  36. 5 5
      docs/api/lights/DirectionalLight.html
  37. 78 80
      docs/api/lights/Light.html
  38. 3 3
      docs/api/lights/RectAreaLight.html
  39. 1 1
      docs/api/lights/SpotLight.html
  40. 1 1
      docs/api/lights/shadows/DirectionalLightShadow.html
  41. 2 2
      docs/api/lights/shadows/LightShadow.html
  42. 1 1
      docs/api/lights/shadows/SpotLightShadow.html
  43. 1 0
      docs/api/loaders/FontLoader.html
  44. 6 1
      docs/api/loaders/JSONLoader.html
  45. 231 231
      docs/api/loaders/ObjectLoader.html
  46. 24 3
      docs/api/materials/Material.html
  47. 1 1
      docs/api/materials/MeshPhongMaterial.html
  48. 9 6
      docs/api/materials/MeshStandardMaterial.html
  49. 0 109
      docs/api/materials/MultiMaterial.html
  50. 11 3
      docs/api/materials/ShaderMaterial.html
  51. 7 3
      docs/api/materials/ShadowMaterial.html
  52. 12 2
      docs/api/math/Box3.html
  53. 37 37
      docs/api/math/Color.html
  54. 6 6
      docs/api/math/Line3.html
  55. 4 4
      docs/api/math/Math.html
  56. 12 0
      docs/api/math/Matrix3.html
  57. 8 6
      docs/api/math/Matrix4.html
  58. 6 6
      docs/api/math/Quaternion.html
  59. 20 21
      docs/api/math/Vector2.html
  60. 5 5
      docs/api/math/Vector3.html
  61. 18 19
      docs/api/math/Vector4.html
  62. 55 0
      docs/api/objects/LineLoop.html
  63. 3 3
      docs/api/objects/Mesh.html
  64. 2 24
      docs/api/objects/Skeleton.html
  65. 6 4
      docs/api/objects/SkinnedMesh.html
  66. 3 0
      docs/api/renderers/WebGLRenderer.html
  67. 3 3
      docs/api/textures/CompressedTexture.html
  68. 34 0
      docs/examples/cameras/CombinedCamera.html
  69. 6 6
      docs/examples/collada/Animation.html
  70. 55 0
      docs/examples/geometries/ConvexBufferGeometry.html
  71. 54 0
      docs/examples/geometries/ConvexGeometry.html
  72. 38 23
      docs/examples/loaders/GLTF2Loader.html
  73. 1 1
      docs/examples/loaders/OBJLoader.html
  74. 89 0
      docs/examples/quickhull/Face.html
  75. 79 0
      docs/examples/quickhull/HalfEdge.html
  76. 175 0
      docs/examples/quickhull/QuickHull.html
  77. 89 0
      docs/examples/quickhull/VertexList.html
  78. 52 0
      docs/examples/quickhull/VertexNode.html
  79. 205 0
      docs/index.css
  80. 337 336
      docs/index.html
  81. 373 376
      docs/list.js
  82. 1 1
      docs/manual/buildTools/Testing-with-NPM.html
  83. 151 0
      docs/manual/introduction/Animation-system.html
  84. 1 1
      docs/manual/introduction/Code-style-guide.html
  85. 12 6
      docs/manual/introduction/Creating-text.html
  86. 3 3
      docs/manual/introduction/Drawing-lines.html
  87. 1 1
      docs/manual/introduction/FAQ.html
  88. 2 3
      docs/manual/introduction/How-to-run-thing-locally.html
  89. 10 9
      docs/manual/introduction/How-to-update-things.html
  90. 3 3
      docs/manual/introduction/Useful-links.html
  91. 0 0
      docs/manual/introduction/WebGL-compatibility-check.html
  92. 9 5
      docs/page.css
  93. 29 3
      docs/page.js
  94. 45 3
      docs/scenes/js/geometry.js
  95. 0 8
      editor/css/dark.css
  96. 0 26
      editor/css/main.css
  97. 87 0
      editor/examples/shaders.app.json
  98. 1 3
      editor/index.html
  99. 1 2
      editor/js/Editor.js
  100. 0 13
      editor/js/Loader.js

File diff suppressed because it is too large
+ 247 - 292
build/three.js


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


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


+ 350 - 117
docs/api/animation/AnimationAction.html

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

+ 104 - 55
docs/api/animation/AnimationClip.html

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

+ 83 - 74
docs/api/animation/AnimationMixer.html

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

+ 55 - 44
docs/api/animation/AnimationObjectGroup.html

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

+ 54 - 51
docs/api/animation/AnimationUtils.html

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

+ 234 - 151
docs/api/animation/KeyframeTrack.html

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

+ 88 - 88
docs/api/animation/PropertyBinding.html

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

+ 68 - 68
docs/api/animation/PropertyMixer.html

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

+ 53 - 47
docs/api/animation/tracks/BooleanKeyframeTrack.html

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

+ 42 - 32
docs/api/animation/tracks/ColorKeyframeTrack.html

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

+ 42 - 32
docs/api/animation/tracks/NumberKeyframeTrack.html

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

+ 49 - 45
docs/api/animation/tracks/QuaternionKeyframeTrack.html

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

+ 56 - 49
docs/api/animation/tracks/StringKeyframeTrack.html

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

+ 42 - 32
docs/api/animation/tracks/VectorKeyframeTrack.html

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

+ 1 - 1
docs/api/audio/AudioListener.html

@@ -93,7 +93,7 @@
 		Return the volume.
 		</div>
 
-		<h3>[method:null getMasterVolume]( [page:Number value] )</h3>
+		<h3>[method:null setMasterVolume]( [page:Number value] )</h3>
 		<div>
 		Set the volume.
 		</div>

+ 7 - 3
docs/api/cameras/Camera.html

@@ -71,9 +71,13 @@
 
 		<h3>[method:Vector3 getWorldDirection]( [page:Vector3 optionalTarget] )</h3>
 		<div>
-		Returns a vector representing the direction in which the camera is looking,
-		in world space. If the [page:Vector3 optionalTarget] is set, returns a vector representing the direction
-		from the camera's position to the [page:Vector3 optionalTarget].
+		Returns a [page:Vector3] representing the world space direction in which the camera is looking.<br /><br />
+		
+		Note: This is not the camera’s positive, but its negative z-axis, in contrast to
+		[page:Object3D.getWorldDirection getWorldDirection] of the base class (Object3D).<br /><br />
+		
+		If an [page:Vector3 optionalTarget] vector is specified, the result will be copied into this vector
+		(which can be reused in this way), otherwise a new vector will be created.
 		</div>
 
 		<h3>[method:null lookAt]( [page:Vector3 target] )</h3>

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

@@ -138,12 +138,12 @@
 		<h3>[property:Array groups]</h3>
 		<div>
 			Split the geometry into groups, each of which will be rendered in a separate WebGL draw call.
-			This allows a [page:MultiMaterial] to be used with the bufferGeometry.<br /><br />
+			This allows an array of materials to be used with the bufferGeometry.<br /><br />
 
 			Each group is an object of the form:
 			<code>{ start: Integer, count: Integer, materialIndex: Integer }</code>
 			where start specifies the index of the first vertex in this draw call, count specifies
-			how many vertices are included, and materialIndex specifies the [page:MultiMaterial] index to use.<br /><br />
+			how many vertices are included, and materialIndex specifies the material array index to use.<br /><br />
 
 			Use [page:.addGroup] to add groups, rather than modifying this array directly.
 		</div>
@@ -329,11 +329,11 @@
 		<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.
-		</div>
-
-		<h3>[method:BufferGeometry updateFromObject] ( [page:Object3D object] )</h3>
-		<div>Updates the attributes for this BufferGeometry from an [page:Object3D].</div>
-
+		</div>
+
+		<h3>[method:BufferGeometry updateFromObject] ( [page:Object3D object] )</h3>
+		<div>Updates the attributes for this BufferGeometry from an [page:Object3D].</div>
+
 
 
 

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

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

+ 16 - 10
docs/api/core/Object3D.html

@@ -49,7 +49,7 @@
 		<div>
 			Used to check whether this or derived classes are Object3Ds. Default is *true*.<br /><br />
 
-			You should not change this, as it used internally for optimisation.
+			You should not change this, as it is used internally for optimisation.
 		</div>
 
 		<h3>[property:Layers layers]</h3>
@@ -69,7 +69,7 @@
 
 		<h3>[property:Matrix4 matrixWorld]</h3>
 		<div>
-		The global transform of the object. If the Object3d has no parent, then it's identical to
+		The global transform of the object. If the Object3D has no parent, then it's identical to
 		the local transform [page:.matrix].
 		</div>
 
@@ -86,7 +86,13 @@
 		<div>Optional name of the object (doesn't need to be unique). Default is an empty string.</div>
 
 		<h3>[property:Matrix3 normalMatrix]</h3>
-		<div>This is passed to the shader and used to calculate lighting for the object.</div>
+		<div>
+		This is passed to the shader and used to calculate lighting for the object. It is the transpose of the inverse of the upper left 3x3 sub-matrix of this object's modelViewMatrix.<br /><br />
+
+		The reason for this special matrix is that simply using the modelViewMatrix could result in a non-unit length of normals (on scaling) or in a non-perpendicular direction (on non-uniform scaling).<br /><br />
+
+		On the other hand the translation part of the modelViewMatrix is not relevant for the calculation of normals. Thus a Matrix3 is sufficient.
+		</div>
 
 		<h3>[property:function onAfterRender]</h3>
 		<div>
@@ -139,7 +145,7 @@
 
 		<h3>[property:object userData]</h3>
 		<div>
-		An object that can be used to store custom data about the Object3d. It should not hold
+		An object that can be used to store custom data about the Object3D. It should not hold
 		references to functions as these will not be cloned.
 		</div>
 
@@ -168,12 +174,12 @@
 		<div>
 			The default [page:.up up] direction for objects, also used as the default position for [page:DirectionalLight],
 			[page:HemisphereLight] and [page:Spotlight] (which creates lights shining from the top down).<br />
-			Set to (0, 1, 0) by default.
+			Set to ( 0, 1, 0 ) by default.
 		</div>
 
 		<h3>[property:Vector3 DefaultMatrixAutoUpdate]</h3>
 		<div>
-			The default setting for [page.matrixAutoUpdate matrixAutoUpdate] for newly created Object3Ds.<br />
+			The default setting for [page:.matrixAutoUpdate matrixAutoUpdate] for newly created Object3Ds.<br />
 
 		</div>
 
@@ -196,7 +202,7 @@
 		<div>
 		recursive -- if true, descendants of the object are also cloned. Default is true.<br /><br />
 
-		Returns a clone of this object and optionaly all descendants.
+		Returns a clone of this object and optionally all descendants.
 		</div>
 
 		<h3>[method:Object3D copy]( [page:Object3D object], [page:Boolean recursive] )</h3>
@@ -216,7 +222,7 @@
 
 		<h3>[method:Object3D getObjectByName]( [page:String name] )</h3>
 		<div>
-		name -- String to match to the children's Object3d.name property. <br /><br />
+		name -- String to match to the children's Object3D.name property. <br /><br />
 
 		Searches through the object's children and returns the first with a matching name.<br />
 		Note that for most objects the [property:name] is an empty string by default. You will
@@ -228,7 +234,7 @@
 		name -- the property name to search for. <br />
 		value -- value of the given property. <br /><br />
 
-		Searches through the object's children and returns the first with a property that matches the aclue given.
+		Searches through the object's children and returns the first with a property that matches the value given.
 		</div>
 
 		<h3>[method:Vector3 getWorldPosition]( [page:Vector3 optionalTarget] )</h3>
@@ -273,7 +279,7 @@
 
 		<h3>[method:Vector3 localToWorld]( [page:Vector3 vector] )</h3>
 		<div>
-		vector - A vector representing a position in local (object) spave.<br /><br />
+		vector - A vector representing a position in local (object) space.<br /><br />
 
 		Converts the vector from local space to world space.
 		</div>

+ 5 - 2
docs/api/deprecated/DeprecatedList.html

@@ -186,7 +186,7 @@
 
 		<h3>[page:Plane]</h3>
 		<div>
-			Plane.isIntersectionLine]() has been renamed to	[page:Plane.intersectsLine]().
+			Plane.isIntersectionLine() has been renamed to	[page:Plane.intersectsLine]().
 		</div>
 
 
@@ -411,7 +411,10 @@
 		</div>
 
 		<h3>[page:MeshFaceMaterial]</h3>
-		<div>MeshFaceMaterial has been removed. Use [page:MultiMaterial] instead.</div>
+		<div>MeshFaceMaterial has been removed. Use an array of materials instead.</div>
+
+		<h3>[page:MultiMaterial]</h3>
+		<div>MultiMaterial has been removed. Use an array of materials instead.</div>
 
 		<h3>[page:MeshPhongMaterial]</h3>
 		<div>MeshPhongMaterial.metal has been removed. Use [page:MeshStandardMaterial] instead.</div>

+ 4 - 4
docs/api/extras/SceneUtils.html

@@ -16,14 +16,14 @@
 		<h2>Methods</h2>
 
 
-		<h3>[method:Object3D createMultiMaterialObject]( [page:Geometry geometry], [page:Array materials] )</h3>
+		<h3>[method:Group createMultiMaterialObject]( [page:Geometry geometry], [page:Array materials] )</h3>
 		<div>
-		geometry -- The geometry for the Object. <br />
+		geometry -- The geometry for the set of materials. <br />
 		materials -- The materials for the object.
 		</div>
 		<div>
-		Creates an new Object3D an new mesh for each material defined in materials. Beware that this is not the same as MultiMaterial which defines multiple material for 1 mesh.<br />
-		This is mostly useful for object that need a material and a wireframe implementation.
+		Creates a new Group that contains a new mesh for each material defined in materials. Beware that this is not the same as an array of materials which defines multiple materials for 1 mesh.<br />
+		This is mostly useful for objects that need both a material and a wireframe implementation.
 		</div>
 
 		<h3>[method:null attach]( [page:Object3D child], [page:Object3D scene], [page:Object3D parent] )</h3>

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

@@ -11,14 +11,10 @@
 		<h1>[name]</h1>
 
 		<div class="desc">
-		An abstract base class for creating a curve object that contains methods for interpolation.
-		For an array of Curves see [page:CurvePath].
+		An abstract base class for creating a [name] object that contains methods for interpolation.
+		For an array of [name]s see [page:CurvePath].
 		</div>
 
-		<h2>Examples</h2>
-
-		<h3>[example:webgl_geometry_extrude_splines geometry / extrude / splines ]</h3>
-
 		<h2>Constructor</h2>
 
 
@@ -27,26 +23,31 @@
 		This constructor creates a new [name].
 		</div>
 
+		<h2>Properties</h2>
+
+		<h3>[property:Integer arcLengthDivisions]</h3>
+		<div>This value determines the amount of divisions when calculating the cumulative segment lengths of a curve via [page:.getLengths].
+			To ensure precision when using methods like [page:.getSpacedPoints], it is recommended to increase [page:.arcLengthDivisions] if the curve is very large. Default is 200.</div>
 
 		<h2>Methods</h2>
 
-		<h3>[method:Vector getPoint]( [page:Number 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 class.</div>
+		<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 getPointAt]( [page:Number u] )</h3>
+		<h3>[method:Vector getPointAt]( [page:Float u] )</h3>
 		<div>
 			Returns a vector for point at a relative position in curve according to arc length.
 			u is in the range [0, 1].
 		</div>
 
-		<h3>[method:Array getPoints]( [page:integer divisions] )</h3>
+		<h3>[method:Array getPoints]( [page:Integer divisions] )</h3>
 		<div>
 			divisions -- number of pieces to divide the curve into. Default is *5*.<br /><br />
 
 			Returns a set of divisions + 1 points using getPoint( t ).
 		</div>
 
-		<h3>[method:Array getSpacedPoints]( divisions )</h3>
+		<h3>[method:Array getSpacedPoints]( [page:Integer divisions] )</h3>
 		<div>
 			divisions -- number of pieces to divide the curve into. Default is *5*.<br /><br />
 
@@ -56,33 +57,33 @@
 		<h3>[method:Float getLength]()</h3>
 		<div>Get total curve arc length.</div>
 
-		<h3>[method:Array getLengths]( divisions )</h3>
+		<h3>[method:Array getLengths]( [page:Integer divisions] )</h3>
 		<div>Get list of cumulative segment lengths.</div>
 
 		<h3>[method:null updateArcLengths]()</h3>
 		<div>Update the cumlative segment distance cache.</div>
 
-		<h3>[method:Float getUtoTmapping]( [page:Number u], distance )</h3>
+		<h3>[method:Float getUtoTmapping]( [page:Float u], [page:Float distance] )</h3>
 		<div>
-			Given u in the range ( 0 .. 1 ), returns [page:Number t] also in the range ( 0 .. 1 ).
+			Given u in the range ( 0 .. 1 ), returns [page:Float t] also in the range ( 0 .. 1 ).
 			u and t can then be used to give you points which are equidistant from the ends of the curve,
 			using [page:.getPoint].
 		 </div>
 
-		<h3>[method:Vector getTangent]( [page:Number t] )</h3>
+		<h3>[method:Vector getTangent]( [page:Float t] )</h3>
 		<div>
-			Returns a unit vector tangent at t. If the subclassed curve do not implement its
-			tangent derivation, 2 points a small delta apart will be used to find its gradient
-			which seems to give a reasonable approximation
+			Returns a unit vector tangent at t. If the derived curve does not implement its
+			tangent derivation, two points a small delta apart will be used to find its gradient
+			which seems to give a reasonable approximation.
 		</div>
 
-		<h3>[method:Vector getTangentAt]( [page:Number u] )</h3>
+		<h3>[method:Vector getTangentAt]( [page:Float u] )</h3>
 		<div>
 			Returns tangent at a point which is equidistant to the ends of the curve from the
 			point given in [page:.getTangent].
 		</div>
 
-		<h3>[method:Object computeFrenetFrames]( segments, closed )</h3>
+		<h3>[method:Object computeFrenetFrames]( [page:Integer segments], [page:Boolean closed] )</h3>
 		<div>
 		Generates the Frenet Frames. Used in geometries like [page:TubeGeometry] or [page:ExtrudeGeometry].
 		</div>

+ 7 - 0
docs/api/extras/core/Font.html

@@ -16,6 +16,13 @@
 		This is used internally by the [page:FontLoader].
 		</div>
 
+		<h2>Examples</h2>
+
+		<div>
+		[example:webgl_geometry_text_shapes geometry / text / shapes ]<br/>
+		[example:webgl_shaders_vector vector / text ]<br/>
+		</div>
+
 		<h2>Constructor</h2>
 
 		<h3>[name]( data )</h3>

+ 1 - 1
docs/api/extras/core/Path.html

@@ -92,7 +92,7 @@ var path = new THREE.Path(vectors);
 
 
 		<h3>[method:null bezierCurveTo]( [page:Float cp1X], [page:Float cp1Y], [page:Float cp2X], [page:Float cp2Y], [page:Float x], [page:Float y] )</h3>
-		<div>This creates a bezier curve from [page:.currentPoint] with cp1X, cp1Y and cp1X, cp1Y as control points and updates [page:.currentPoint] to x and y.</div>
+		<div>This creates a bezier curve from [page:.currentPoint] with (cp1X, cp1Y) and (cp2X, cp2Y) as control points and updates [page:.currentPoint] to x and y.</div>
 
 		<h3>[method:null fromPoints]( [page:Array vector2s] )</h3>
 		<div>

+ 145 - 0
docs/api/geometries/ExtrudeBufferGeometry.html

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

+ 145 - 145
docs/api/geometries/ExtrudeGeometry.html

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

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

@@ -12,7 +12,7 @@
 
 		<h1>[name]</h1>
 
-		<div class="desc">Class for generating meshes with axial symmetry. Possible uses include donuts, pipes, vases etc. The lathe rotate around the Y axis.</div>
+		<div class="desc">Creates meshes with axial symmetry like vases. The lathe rotates around the Y axis.</div>
 
 		<iframe id="scene" src="scenes/geometry-browser.html#LatheGeometry"></iframe>
 
@@ -55,7 +55,7 @@
 		phiLength — the radian (0 to 2PI) range of the lathed section 2PI is a closed lathe, less than 2PI is a portion. Default is 2PI.
 		</div>
 		<div>
-		This creates a LatheBufferGeometry based on the parameters.
+		This creates a LatheGeometry based on the parameters.
 		</div>
 
 		<h2>Source</h2>

+ 26 - 4
docs/api/geometries/TextGeometry.html

@@ -12,7 +12,11 @@
 
 		<h1>[name]</h1>
 
-		<div class="desc">This object creates a 3D object of text as a single object.</div>
+		<div class="desc">
+			A class for generating text as a single geometry. It is constructed by providing a string of text, and a hash of 
+			parameters consisting of a loaded [page:Font] and settings for the geometry's parent [page:ExtrudeGeometry].
+			See the [page:Font], [page:FontLoader] and [page:Creating_Text] pages for additional details.
+		</div>
 
 		<iframe id="scene" src="scenes/geometry-browser.html#TextGeometry"></iframe>
 
@@ -32,13 +36,31 @@
 
 		</script>
 
-		<h2>Example</h2>
+		<h2>Examples</h2>
 
 		<div>
 		[example:webgl_geometry_text geometry / text ]<br/>
 		[example:webgl_geometry_text2 geometry / text2 ]
 		</div>
 
+		<code>
+		var loader = new THREE.FontLoader();
+		
+		loader.load( 'fonts/helvetiker_regular.typeface.json', function ( font ) {
+
+			var geometry = new THREE.TextGeometry( 'Hello three.js!', {
+				font: font,
+				size: 80,
+				height: 5,
+				curveSegments: 12,
+				bevelEnabled: true,
+				bevelThickness: 10,
+				bevelSize: 8,
+				bevelSegments: 5
+			} );
+		} );			
+		</code>
+
 		<h2>Constructor</h2>
 
 		<h3>[name]([page:String text], [page:Object parameters])</h3>
@@ -46,8 +68,8 @@
 		text — The text that needs to be shown. <br />
 		parameters — Object that can contains the following parameters.
 		<ul>
-			<li>font — THREE.Font.</li>
-			<li>size — Float. Size of the text.</li>
+			<li>font — an instance of THREE.Font.</li>
+			<li>size — Float. Size of the text. Default is 100.</li>
 			<li>height — Float. Thickness to extrude text.  Default is 50.</li>
 			<li>curveSegments — Integer. Number of points on the curves. Default is 12.</li>
 			<li>bevelEnabled — Boolean. Turn on bevel. Default is False.</li>

+ 3 - 1
docs/api/geometries/TubeBufferGeometry.html

@@ -35,7 +35,9 @@
 		<h2>Example</h2>
 
 		<code>
-		function CustomSinCurve( scale ){
+		function CustomSinCurve( scale ) {
+
+			THREE.Curve.call( this );
 
 			this.scale = ( scale === undefined ) ? 1 : scale;
 

+ 3 - 1
docs/api/geometries/TubeGeometry.html

@@ -35,7 +35,9 @@
 		<h2>Example</h2>
 
 		<code>
-		function CustomSinCurve( scale ){
+		function CustomSinCurve( scale ) {
+
+			THREE.Curve.call( this );
 
 			this.scale = ( scale === undefined ) ? 1 : scale;
 

+ 11 - 4
docs/api/helpers/BoxHelper.html

@@ -40,7 +40,7 @@
 
 		<h3>[name]( [page:Object3D object], [page:Color color] )</h3>
 		<div>
-		[page:Object3D object]  -- the object3D to show the world-axis-aligned boundingbox.<br />
+		[page:Object3D object]  -- (optional) the object3D to show the world-axis-aligned boundingbox.<br />
 		[page:Color color] --  (optional) hexadecimal value that defines the box's color. Default is 0xffff00.<br /><br />
 
 		Creates a new wireframe box that bounds the passed object. Internally this uses [page:Box3.setFromObject]
@@ -54,10 +54,17 @@
 		<h2>Methods</h2>
 		<div>See the base [page:LineSegments] class for common methods.</div>
 
-		<h3>[method:null update]( [page:Object3D object] )</h3>
+		<h3>[method:null update]()</h3>
 		<div>
-			Updates the helper's geometry to match the dimensions of the
-		 	of the passed object, including any children. See [page:Box3.setFromObject].
+			Updates the helper's geometry to match the dimensions
+			of the object, including any children. See [page:Box3.setFromObject].
+		</div>
+
+		<h3>[method:BoxHelper setFromObject]( [page:Object3D object] )</h3>
+		<div>
+			[page:Object3D object] - [page:Object3D] to create the helper of.<br /><br />
+
+			Updates the wireframe box for the passed object.
 		</div>
 
 		<h2>Source</h2>

+ 1 - 1
docs/api/helpers/FaceNormalsHelper.html

@@ -32,7 +32,7 @@
 
 		helper = new THREE.FaceNormalsHelper( box, 2, 0x00ff00, 1 );
 
-		scene.add( object );
+		scene.add( box );
 		scene.add( helper );
 		</code>
 

+ 5 - 5
docs/api/lights/DirectionalLight.html

@@ -13,7 +13,7 @@
 		<h1>[name]</h1>
 
 		<div class="desc">
-			A light that gets emitted in a specific direction. This light will behave	as though it is
+			A light that gets emitted in a specific direction. This light will behave as though it is
 			infinitely far away and the rays produced from it are all parallel. The common use case
 			for this is to simulate daylight; the sun is far enough away that its position can be
 			considered to be infinite, and all light rays coming from it are parallel.<br /><br />
@@ -29,7 +29,7 @@
 
 			This means that its direction is calculated as pointing
 			from the light's [page:Object3D.position position] to	the [page:.target target]'s position
-			(as opposed to a a 'Free Direct Light' that just has a rotation component).<br /><br />
+			(as opposed to a 'Free Direct Light' that just has a rotation component).<br /><br />
 
 			The reason for this is to allow the light to cast shadows - the [page:.shadow shadow]
 			camera needs a position to calculate shadows from.<br /><br />
@@ -81,9 +81,9 @@ scene.add( directionalLight );
 
 		<h3>[property:Boolean isDirectionalLight]</h3>
 		<div>
-			Used to check whether this or derived classes are dircrectional lights. Default is *true*.<br /><br />
+			Used to check whether this or derived classes are directional lights. Default is *true*.<br /><br />
 
-			You should not change this, as it used internally for optimisation.
+			You should not change this, as it is used internally for optimisation.
 		</div>
 
 
@@ -102,7 +102,7 @@ scene.add( directionalLight );
 			The DirectionalLight points from its [page:.position position] to target.position. The default
 			position of the target is *(0, 0, 0)*.<br />
 
-			*Note*: For the the target's position to be changed to anything other than the default,
+			*Note*: For the target's position to be changed to anything other than the default,
 			it must be added to the [page:Scene scene] using
 			<code>
 				scene.add( light.target );

+ 78 - 80
docs/api/lights/Light.html

@@ -1,81 +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:Object3D] &rarr;
-
-		<h1>[name]</h1>
-
-		<div class="desc">
-			Abstract base class for lights - all other light types inherit the properties and methods
-			described here.
-		</div>
-
-
-		<h2>Constructor</h2>
-
-
-		<h3>[name]( [page:Integer color], [page:float intensity] )</h3>
-		<div>
-		[page:Integer color] - (optional) hexadecimal color of the light. Default is 0xffffff (white).<br />
-		[page:Float intensity] - (optional) numeric value of the light's strength/intensity. Default is 1.<br /><br />
-
-		Creates a new [name]. Note that this is not intended to be called directly (use one of <thead>
-			derived classes instead).
-		</thead>)
-		</div>
-
-		<h2>Properties</h2>
-		<div>
-			See the base [page:Object3D Object3D] class for common properties.
-		</div>
-
-		<h3>[property:Color color]</h3>
-		<div>
-			Color of the light. Defaults to a new [page:Color] set to white, if not passed in the constructor.<br />
-		</div>
-
-		<h3>[property:Float intensity]</h3>
-		<div>
-			The light's intensity, or strength.<br />
-			In [page:WebGLRenderer.physicallyCorrectLights physically correct] mode, the product of
-			[page:.color color] * intensity is interpreted as luminous intensity measured in candela.<br />
-			Default - *1.0*.
-		</div>
-
-		<h3>[property:Boolean isLight]</h3>
-		<div>
-			Used to check whether this or derived classes are lights. Default is *true*.<br /><br />
-
-			You should not change this, as it used internally for optimisation.
-		</div>
-
-
-		<h2>Methods</h2>
-		<div>
-			See the base [page:Object3D Object3D] class for common methods.
-		</div>
-
-
-		<h3>[method:Light copy]( [page:Light source] )</h3>
-		<div>
-		Copies the value of [page:.color color] and [page:.intensity intensity] from the
-		[page:Light source] light into this one.
-		</div>
-
-		<h3>[method:JSON toJSON]( [page:String meta] )</h3>
-		<div>
-		Return Light data in JSON format.
-		</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:Object3D] &rarr;
+
+		<h1>[name]</h1>
+
+		<div class="desc">
+			Abstract base class for lights - all other light types inherit the properties and methods
+			described here.
+		</div>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [page:Integer color], [page:float intensity] )</h3>
+		<div>
+		[page:Integer color] - (optional) hexadecimal color of the light. Default is 0xffffff (white).<br />
+		[page:Float intensity] - (optional) numeric value of the light's strength/intensity. Default is 1.<br /><br />
+
+		Creates a new [name]. Note that this is not intended to be called directly (use one of derived classes instead).
+		</div>
+
+		<h2>Properties</h2>
+		<div>
+			See the base [page:Object3D Object3D] class for common properties.
+		</div>
+
+		<h3>[property:Color color]</h3>
+		<div>
+			Color of the light. Defaults to a new [page:Color] set to white, if not passed in the constructor.<br />
+		</div>
+
+		<h3>[property:Float intensity]</h3>
+		<div>
+			The light's intensity, or strength.<br />
+			In [page:WebGLRenderer.physicallyCorrectLights physically correct] mode, the product of
+			[page:.color color] * intensity is interpreted as luminous intensity measured in candela.<br />
+			Default - *1.0*.
+		</div>
+
+		<h3>[property:Boolean isLight]</h3>
+		<div>
+			Used to check whether this or derived classes are lights. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</div>
+
+
+		<h2>Methods</h2>
+		<div>
+			See the base [page:Object3D Object3D] class for common methods.
+		</div>
+
+
+		<h3>[method:Light copy]( [page:Light source] )</h3>
+		<div>
+		Copies the value of [page:.color color] and [page:.intensity intensity] from the
+		[page:Light source] light into this one.
+		</div>
+
+		<h3>[method:JSON toJSON]( [page:String meta] )</h3>
+		<div>
+		Return Light data in JSON format.
+		</div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

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

@@ -52,12 +52,12 @@ scene.add(rectLight)
 		<h2>Constructor</h2>
 
 
-		<h3>[name]( [page:Integer color], [page:Float intensity], [page:Float distance], [page:Radians angle], [page:Float penumbra], [page:Float decay] )</h3>
+		<h3>[name]( [page:Integer color], [page:Float intensity], [page:Float width], [page:Float height] )</h3>
 		<div>
 			[page:Integer color] - (optional) hexadecimal color of the light. Default is 0xffffff (white).<br />
-			[page:Float intensity] - (optional) numeric value of the light's strength/intensity. Default is 1.<br /><br />
+			[page:Float intensity] - (optional) numeric value of the light's strength/intensity. Default is 1.<br />
 			[page:Float width] - (optional) width of the light. Default is 10.<br />
-			[page:Float height] - (optional) height of the light. Default is 10.
+			[page:Float height] - (optional) height of the light. Default is 10.<br /><br />
 
 			Creates a new [name].
 		</div>

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

@@ -155,7 +155,7 @@
 			The Spotlight points from its [page:.position position] to target.position. The default
 			position of the target is *(0, 0, 0)*.<br />
 
-			*Note*: For the the target's position to be changed to anything other than the default,
+			*Note*: For the target's position to be changed to anything other than the default,
 			it must be added to the [page:Scene scene] using
 			<code>
 				scene.add( light.target );

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

@@ -13,7 +13,7 @@
 		<h1>[name]</h1>
 
 		<div class="desc">
-			This used internally by [page:DirectionalLight DirectionalLights] for calculating shadows.<br /><br />
+			This is used internally by [page:DirectionalLight DirectionalLights] for calculating shadows.<br /><br />
 
 			Unlike the other shadow classes, this uses an [page:OrthographicCamera] to calculate the shadows,
 			rather than a [page:PerspectiveCamera]. This is because light rays from a [page:DirectionalLight]

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

@@ -12,7 +12,7 @@
 		<h1>[name]</h1>
 
 		<div class="desc">
-			This used internally by [page:PointLight PointLights] for calculating shadows, and also serves as
+			This is used internally by [page:PointLight PointLights] for calculating shadows, and also serves as
 			a base class for the other shadow classes.
 		</div>
 
@@ -108,7 +108,7 @@ scene.add( helper );
 
 		<h3>[property:Float radius]</h3>
 		<div>
-			Setting this this to values greater than 1 will blur the edges of the shadow.<br />
+			Setting this to values greater than 1 will blur the edges of the shadow.<br />
 
 			High values will cause unwanted banding effects in the shadows - a greater [page:.mapSize mapSize]
 			will allow for a higher value to be used here before these effects become visible.<br /><br />

+ 1 - 1
docs/api/lights/shadows/SpotLightShadow.html

@@ -13,7 +13,7 @@
 		<h1>[name]</h1>
 
 		<div class="desc">
-			This used internally by [page:SpotLight SpotLights] for calculating shadows.
+			This is used internally by [page:SpotLight SpotLights] for calculating shadows.
 		</div>
 
 		<h2>Example</h2>

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

@@ -21,6 +21,7 @@
 		<h2>Examples</h2>
 
 		<div>
+		[example:webgl_geometry_text_shapes geometry / text / shapes ]<br/>
 		[example:webgl_geometry_text geometry / text ]<br />
 		[example:webgl_geometry_text_earcut geometry / text / earcut]<br />
 		[example:webgl_geometry_text_pnltri geometry / text / pnltri]<br />

+ 6 - 1
docs/api/loaders/JSONLoader.html

@@ -28,13 +28,18 @@
 
 		// load a resource
 		loader.load(
+
 			// resource URL
 			'models/animated/monster/monster.js',
+
 			// Function when resource is loaded
 			function ( geometry, materials ) {
-				var material = new THREE.MultiMaterial( materials );
+
+				var material = materials[ 0 ];
 				var object = new THREE.Mesh( geometry, material );
+
 				scene.add( object );
+
 			}
 		);
 		</code>

+ 231 - 231
docs/api/loaders/ObjectLoader.html

@@ -1,232 +1,232 @@
-<!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>
-		<h1>[name]</h1>
-
-		<div class="desc">
-			A loader for loading a JSON resource. Unlike the [page:JSONLoader], this one make use of the
-			<em>.type</em> attributes of objects to map them to their original classes.<br /><br />
-
-			Note that this loader can't load [page:Geometries]. Use [page:JSONLoader] instead for that.<br /><br />
-
-			This uses the [page:FileLoader] internally for loading files.
-		</div>
-
-		<h2>Example</h2>
-
-		<div>
-
-			[example:webgl_animation_scene WebGL / animation / scene]<br />
-			[example:webgl_loader_json_claraio WebGL / loader / json / claraio]<br />
-			[example:webgl_loader_msgpack WebGL / loader / msgpack]
-		</div>
-
-		<code>
-var loader = new THREE.ObjectLoader();
-
-loader.load(
-    // resource URL
-    "models/json/example.json"
-
-    // pass the loaded data to the onLoad function.
-		//Here it is assumed to be an object
-    function ( obj ) {
-				//add the loaded object to the scene
-        scene.add( obj );
-    },
-
-    // Function called when download progresses
-    function ( xhr ) {
-        console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
-    },
-
-    // Function called when download errors
-    function ( xhr ) {
-        console.error( 'An error happened' );
-    }
-);
-
-
-// Alternatively, to parse a previously loaded JSON structure
-var object = loader.parse( a_json_object );
-
-scene.add( object );
-		</code>
-
-
-
-		<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].<br /><br />
-
-		Creates a new [name].
-		</div>
-
-
-		<h2>Properties</h2>
-
-		<h3>[property:String crossOrigin]</h3>
-		<div>
-		If set, assigns the [link:https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes crossOrigin]
-	 attribute of the image to the value of *crossOrigin*,
-		prior to starting the load. Default is *undefined*.
-		</div>
-
-		<h3>[property:LoadingManager manager]</h3>
-		<div>
-			The [page:LoadingManager loadingManager]  the loader is using. Default is [page:DefaultLoadingManager].
-		</div>
-
-		<h3>[property:String texturePath]</h3>
-		<div>
-			The base path or URL from which textures will be loaded. See [page:.setTexturePath].
-			Default is the empty string.
-		</div>
-
-		<h2>Methods</h2>
-
-		<h3>[method:null 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 />
-		[page:Function onLoad] — Will be called when load completes. The argument will be the loaded [page:Object3D object].<br />
-		[page:Function onProgress] — Will be called while load progresses. The argument will be the XmlHttpRequest instance, that contain .[page:Integer total] and .[page:Integer loaded] bytes.<br />
-		[page:Function onError] — Will be called when load errors.<br />
-		</div>
-		<div>
-		Begin loading from url and call onLoad with the parsed response content.
-		</div>
-
-
-		<h3>[method:Object3D parse]( [page:Object json], [page:Function onLoad]  )</h3>
-		<div>
-		[page:Object json] — required. The JSON source to parse.<br /><br />
-		[page:Function onLoad] — Will be called when parsed completes. The argument will be the parsed [page:Object3D object].<br />
-
-		Parse a <em>JSON</em> structure and return a threejs object.
-		This is used internally by [page:.load], but can also be used directly to parse
-		a previously loaded JSON structure.
-		</div>
-
-		<h3>[method:Object3D parseGeometries]( [page:Object json] )</h3>
-		<div>
-		[page:Object json] — required. The JSON source to parse.<br /><br />
-
-		This is used [page:.parse] to parse any [page:Geometry geometries] or [page:BufferGeometry buffer geometries]  in the JSON structure.
-		Internally it uses [page:JSONLoader] for geometries and [page:BufferGeometryLoader] for buffer geometries.
-		</div>
-
-		<h3>[method:Object3D parseMaterials]( [page:Object json] )</h3>
-		<div>
-		[page:Object json] — required. The JSON source to parse.<br /><br />
-
-		This is used [page:.parse] to parse any materials in the JSON structure using [page:MaterialLoader].
-		</div>
-
-		<h3>[method:Object3D parseAnimations]( [page:Object json] )</h3>
-		<div>
-		[page:Object json] — required. The JSON source to parse.<br /><br />
-
-		This is used [page:.parse] to parse any animations in the JSON structure, using [page:AnimationClip.parse].
-		</div>
-
-		<h3>[method:Object3D parseImages]( [page:Object json] )</h3>
-		<div>
-		[page:Object json] — required. The JSON source to parse.<br /><br />
-
-		This is used [page:.parse] to parse any images in the JSON structure, using [page:ImageLoader].
-		</div>
-
-		<h3>[method:Object3D parseTextures]( [page:Object json] )</h3>
-		<div>
-		[page:Object json] — required. The JSON source to parse.<br /><br />
-
-		This is used [page:.parse] to parse any textures in the JSON structure.
-		</div>
-
-		<h3>[method:Object3D parseObject]( [page:Object json] )</h3>
-		<div>
-		[page:Object json] — required. The JSON source to parse.<br /><br />
-
-		This is used [page:.parse] to parse any objects in the JSON structure.
-		Objects can be of the following types:
-
-		<ul>
-			<li>
-				[page:Scene]
-			</li>
-			<li>
-				[page:PerspectiveCamera]
-			</li>
-			<li>
-				[page:OrthographicCamera]
-			</li>
-			<li>
-				[page:AmbientLight]
-			</li>
-			<li>
-				[page:DirectionalLight]
-			</li>
-			<li>
-				[page:PointLight]
-			</li>
-			<li>
-				[page:SpotLight]
-			</li>
-			<li>
-				[page:HemisphereLight]
-			</li>
-			<li>
-				[page:Mesh]
-			</li>
-			<li>
-				[page:LOD]
-			</li>
-			<li>
-				[page:Line]
-			</li>
-			<li>
-				[page:LineSegments]
-			</li>
-			<li>
-				[page:Points]
-			</li>
-			<li>
-				[page:Sprite]
-			</li>
-			<li>
-				[page:Group]
-			</li>
-			<li>
-				[page:Object3D]
-			</li>
-
-		</ul>
-		</div>
-
-		<h3>[method:null setCrossOrigin]( [page:String value] )</h3>
-		<div>
-		[page:String value] — The crossOrigin string to implement CORS for loading the url from a different domain that allows CORS.
-		</div>
-
-		<h3>[method:null setTexturePath]( [page:String value] )</h3>
-		<div>
-		[page:String value] — The base path or URL from which textures will be loaded.<br /><br />
-
-
-		</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>
+		<h1>[name]</h1>
+
+		<div class="desc">
+			A loader for loading a JSON resource. Unlike the [page:JSONLoader], this one make use of the
+			<em>.type</em> attributes of objects to map them to their original classes.<br /><br />
+
+			Note that this loader can't load [page:Geometries]. Use [page:JSONLoader] instead for that.<br /><br />
+
+			This uses the [page:FileLoader] internally for loading files.
+		</div>
+
+		<h2>Example</h2>
+
+		<div>
+
+			[example:webgl_animation_scene WebGL / animation / scene]<br />
+			[example:webgl_loader_json_claraio WebGL / loader / json / claraio]<br />
+			[example:webgl_loader_msgpack WebGL / loader / msgpack]
+		</div>
+
+		<code>
+var loader = new THREE.ObjectLoader();
+
+loader.load(
+    // resource URL
+    "models/json/example.json",
+
+    // pass the loaded data to the onLoad function.
+		//Here it is assumed to be an object
+    function ( obj ) {
+				//add the loaded object to the scene
+        scene.add( obj );
+    },
+
+    // Function called when download progresses
+    function ( xhr ) {
+        console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
+    },
+
+    // Function called when download errors
+    function ( xhr ) {
+        console.error( 'An error happened' );
+    }
+);
+
+
+// Alternatively, to parse a previously loaded JSON structure
+var object = loader.parse( a_json_object );
+
+scene.add( object );
+		</code>
+
+
+
+		<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].<br /><br />
+
+		Creates a new [name].
+		</div>
+
+
+		<h2>Properties</h2>
+
+		<h3>[property:String crossOrigin]</h3>
+		<div>
+		If set, assigns the [link:https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes crossOrigin]
+	 attribute of the image to the value of *crossOrigin*,
+		prior to starting the load. Default is *undefined*.
+		</div>
+
+		<h3>[property:LoadingManager manager]</h3>
+		<div>
+			The [page:LoadingManager loadingManager]  the loader is using. Default is [page:DefaultLoadingManager].
+		</div>
+
+		<h3>[property:String texturePath]</h3>
+		<div>
+			The base path or URL from which textures will be loaded. See [page:.setTexturePath].
+			Default is the empty string.
+		</div>
+
+		<h2>Methods</h2>
+
+		<h3>[method:null 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 />
+		[page:Function onLoad] — Will be called when load completes. The argument will be the loaded [page:Object3D object].<br />
+		[page:Function onProgress] — Will be called while load progresses. The argument will be the XmlHttpRequest instance, that contain .[page:Integer total] and .[page:Integer loaded] bytes.<br />
+		[page:Function onError] — Will be called when load errors.<br />
+		</div>
+		<div>
+		Begin loading from url and call onLoad with the parsed response content.
+		</div>
+
+
+		<h3>[method:Object3D parse]( [page:Object json], [page:Function onLoad]  )</h3>
+		<div>
+		[page:Object json] — required. The JSON source to parse.<br /><br />
+		[page:Function onLoad] — Will be called when parsed completes. The argument will be the parsed [page:Object3D object].<br />
+
+		Parse a <em>JSON</em> structure and return a threejs object.
+		This is used internally by [page:.load], but can also be used directly to parse
+		a previously loaded JSON structure.
+		</div>
+
+		<h3>[method:Object3D parseGeometries]( [page:Object json] )</h3>
+		<div>
+		[page:Object json] — required. The JSON source to parse.<br /><br />
+
+		This is used [page:.parse] to parse any [page:Geometry geometries] or [page:BufferGeometry buffer geometries]  in the JSON structure.
+		Internally it uses [page:JSONLoader] for geometries and [page:BufferGeometryLoader] for buffer geometries.
+		</div>
+
+		<h3>[method:Object3D parseMaterials]( [page:Object json] )</h3>
+		<div>
+		[page:Object json] — required. The JSON source to parse.<br /><br />
+
+		This is used [page:.parse] to parse any materials in the JSON structure using [page:MaterialLoader].
+		</div>
+
+		<h3>[method:Object3D parseAnimations]( [page:Object json] )</h3>
+		<div>
+		[page:Object json] — required. The JSON source to parse.<br /><br />
+
+		This is used [page:.parse] to parse any animations in the JSON structure, using [page:AnimationClip.parse].
+		</div>
+
+		<h3>[method:Object3D parseImages]( [page:Object json] )</h3>
+		<div>
+		[page:Object json] — required. The JSON source to parse.<br /><br />
+
+		This is used [page:.parse] to parse any images in the JSON structure, using [page:ImageLoader].
+		</div>
+
+		<h3>[method:Object3D parseTextures]( [page:Object json] )</h3>
+		<div>
+		[page:Object json] — required. The JSON source to parse.<br /><br />
+
+		This is used [page:.parse] to parse any textures in the JSON structure.
+		</div>
+
+		<h3>[method:Object3D parseObject]( [page:Object json] )</h3>
+		<div>
+		[page:Object json] — required. The JSON source to parse.<br /><br />
+
+		This is used [page:.parse] to parse any objects in the JSON structure.
+		Objects can be of the following types:
+
+		<ul>
+			<li>
+				[page:Scene]
+			</li>
+			<li>
+				[page:PerspectiveCamera]
+			</li>
+			<li>
+				[page:OrthographicCamera]
+			</li>
+			<li>
+				[page:AmbientLight]
+			</li>
+			<li>
+				[page:DirectionalLight]
+			</li>
+			<li>
+				[page:PointLight]
+			</li>
+			<li>
+				[page:SpotLight]
+			</li>
+			<li>
+				[page:HemisphereLight]
+			</li>
+			<li>
+				[page:Mesh]
+			</li>
+			<li>
+				[page:LOD]
+			</li>
+			<li>
+				[page:Line]
+			</li>
+			<li>
+				[page:LineSegments]
+			</li>
+			<li>
+				[page:Points]
+			</li>
+			<li>
+				[page:Sprite]
+			</li>
+			<li>
+				[page:Group]
+			</li>
+			<li>
+				[page:Object3D]
+			</li>
+
+		</ul>
+		</div>
+
+		<h3>[method:null setCrossOrigin]( [page:String value] )</h3>
+		<div>
+		[page:String value] — The crossOrigin string to implement CORS for loading the url from a different domain that allows CORS.
+		</div>
+
+		<h3>[method:null setTexturePath]( [page:String value] )</h3>
+		<div>
+		[page:String value] — The base path or URL from which textures will be loaded.<br /><br />
+
+
+		</div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 24 - 3
docs/api/materials/Material.html

@@ -17,8 +17,8 @@
 		They are defined in a (mostly) renderer-independent way, so you don't have to
 		rewrite materials if you decide to use a different renderer.<br /><br />
 
-		With the exception of [page:MultiMaterial MultiMaterial], the following properties
-		and methods are inherited by all other material types (although they may have different defaults).
+		The following properties and methods are inherited by all other material types
+		(although they may have different defaults).
 		</div>
 
 		<h2>Constructor</h2>
@@ -100,6 +100,21 @@
 		This can be used in conjunction with a mesh's [property:Integer renderOrder] property to create invisible objects that occlude other objects. Default is *true*.
 		</div>
 
+		<h3>[property:Material customDepthMaterial]</h3>
+		<div>
+		Custom depth material to be used by this material in depth based computation. If a material uses any custom logic to position the vertices (animation, displacement other than the default texture based, instancing...) the depth material should also include that logic in order to make effects like shadows and SSAO work. Defining this property allows the WebGLRenderer to use this instance of the material instead of the internal cache. Default is *undefined*.
+		</div>
+		
+		<h3>[property:Material customDistanceMaterial]</h3>
+		<div>
+		Same as customDepthMaterial but used for specific computation (point lights for example). Default is *undefined*
+		</div>
+		
+		<h3>[property:Object defines]</h3>
+		<div>
+		Custom defines to be injected into the shader. These are passed in form of an object literal, with key/value pairs. { MY_CUSTOM_DEFINE: '' , PI2: Math.PI * 2 }. The pairs are defined in both vertex and fragment shaders.  Default is *undefined*.
+		</div>
+		
 		<h3>[property:Integer depthFunc]</h3>
 		<div>
 		Which depth function to use. Default is [page:Materials LessEqualDepth]. See the depth mode [page:Materials constants] for all possible values.
@@ -183,6 +198,12 @@
 		Default is *false*.
 		</div>
 
+		<h3>[property:Boolean dithering]</h3>
+		<div>
+		Whether to apply dithering to the color to remove the appearance of banding.
+		Default is *false*.
+		</div>
+
 		<h3>[property:Integer shading]</h3>
 		<div>
 		Defines how the material is shaded.
@@ -236,7 +257,7 @@
 		<h3>[page:EventDispatcher EventDispatcher] methods are available on this class.</h3>
 
 		<h3>[method:Material clone]( )</h3>
-		<div>Return a new materials with the same parameters as this material.</div>
+		<div>Return a new material with the same parameters as this material.</div>
 
 		<h3>[method:Material copy]( [page:material material] )</h3>
 		<div>Copy the parameters from the passed material into this material.</div>

+ 1 - 1
docs/api/materials/MeshPhongMaterial.html

@@ -15,7 +15,7 @@
 		<div class="desc">
 			A material for shiny surfaces with specular highlights.<br /><br />
 
-			The uses a non-physically based [link:https://en.wikipedia.org/wiki/LBlinn-Phong_shading_model Blinn-Phong]
+			The uses a non-physically based [link:https://en.wikipedia.org/wiki/Blinn-Phong_shading_model Blinn-Phong]
 			model	for calculating reflectance. Unlike the Lambertian model used in the [page:MeshLambertMaterial]
 			this can simulate shiny surfaces with specular highlights (such as varnished wood).<br /><br />
 

+ 9 - 6
docs/api/materials/MeshStandardMaterial.html

@@ -13,7 +13,7 @@
 		<h1>[name]</h1>
 
 		<div class="desc">
-			A standard physically based material.<br /><br />
+			A standard physically based material, using Metallic-Roughness workflow.<br /><br />
 
 			Physically based rendering (PBR) has recently become the standard in many 3D applications, such as
 			[link:https://blogs.unity3d.com/2014/10/29/physically-based-shading-in-unity-5-a-primer/ Unity],
@@ -97,7 +97,7 @@
 		</div>
 
 		<h3>[property:Texture aoMap]</h3>
-		<div>The ambient occlusion map. Default is null.</div>
+		<div>The red channel of this texture is used as the ambient occlusion map. Default is null.</div>
 
 		<h3>[property:Float aoMapIntensity]</h3>
 		<div>Intensity of the ambient occlusion effect. Default is 1. Zero is no occlusion effect.</div>
@@ -188,11 +188,13 @@
 
 		<h3>[property:Float metalness]</h3>
 		<div>
-		How much the material is like a metal. Non-metallic materials such as wood or stone use 0.0, metallic use 1.0, nothing in between. A value between 0.0 and 1.0 could be used for a rusty metal look.<br />
+			How much the material is like a metal. Non-metallic materials such as wood or stone use 0.0, metallic use 1.0, with nothing
+			(usually) in between. Default is 0.5. A value between 0.0 and 1.0 could be used for a rusty metal look. If metalnessMap is
+			also provided, both values are multiplied.
 		</div>
 
 		<h3>[property:Texture metalnessMap]</h3>
-		<div>The red channel of this texture is used to alter the metalness of the material.</div>
+		<div>The blue channel of this texture is used to alter the metalness of the material.</div>
 
 		<h3>[property:boolean morphNormals]</h3>
 		<div>
@@ -220,11 +222,12 @@
 
 		<h3>[property:Float roughness]</h3>
 		<div>
-		How rough the material appears. 0.0 means a smooth mirror reflection, 1.0 means fully diffuse.
+			How rough the material appears. 0.0 means a smooth mirror reflection, 1.0 means fully diffuse. Default is 0.5.
+			If roughnessMap is also provided, both values are multiplied.
 		</div>
 
 		<h3>[property:Texture roughnessMap]</h3>
-		<div>The red channel of this texture is used to alter the roughness of the material.</div>
+		<div>The green channel of this texture is used to alter the roughness of the material.</div>
 
 		<h3>[property:Boolean skinning]</h3>
 		<div>Define whether the material uses skinning. Default is false.</div>

+ 0 - 109
docs/api/materials/MultiMaterial.html

@@ -1,109 +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 Material to define multiple materials for the same geometry.
-		The geometry decides which material is used for which faces by the [page:Face3 faces materialindex].
-		The material index corresponds with the index of the material in the [page:.materials] array.
-		</div>
-
-		<h2>Examples</h2>
-		<div>
-			[example:webgl_animation_skinning_morph WebGL / animation / skinning / morph]<br />
-			[example:webgl_effects_parallaxbarrier WebGL / effect / parallaxbarrier]<br />
-			[example:webgl_geometry_colors_blender WebGL / geometry / colors / blender]<br />
-			[example:webgl_geometry_text_earcut WebGL / geometry / text / earcut]<br />
-			[example:webgl_geometry_text_pnltri WebGL / geometry / text / pnltri]<br />
-			[example:webgl_geometry_text WebGL / geometry / text]<br />
-			[example:webgl_loader_ctm_materials WebGL / loader / ctm / materials]<br />
-			[example:webgl_loader_json_blender WebGL / loader / json / blender]<br />
-			[example:webgl_loader_json_objconverter WebGL / loader / json / objconverter]<br />
-			[example:webgl_loader_mmd WebGL / loader / mmd]<br />
-			[example:webgl_materials_cars WebGL / materials / cars]<br />
-			[example:webgl_materials_lightmap  WebGL / materials / lightmap]<br />
-			[example:webgl_materials WebGL / materials /  / ]<br />
-			[example:webgl_nearestneighbour WebGL / nearestneighbour]<br />
-			[example:webgl_objects_update WebGL / objects / update]<br />
-			[example:webgl_panorama_cube WebGL / panorama / cube]<br />
-			[example:webgl_skinning_simple WebGL / skinning / simple]
-
-		</div>
-
-		<code>
-//The following will create a cube with a different material applied to each side
-var materials = [
-
-    new THREE.MeshBasicMaterial( { color: 0xff0000 } ), // right
-    new THREE.MeshBasicMaterial( { color: 0x0000ff } ), // left
-    new THREE.MeshBasicMaterial( { color: 0x00ff00 } ), // top
-    new THREE.MeshBasicMaterial( { color: 0xffff00 } ), // bottom
-    new THREE.MeshBasicMaterial( { color: 0x00ffff } ), // back
-    new THREE.MeshBasicMaterial( { color: 0xff00ff } )  // front
-
-];
-
-var cubeSidesMaterial = new THREE.MultiMaterial( materials );
-
-var cubeGeometry = new THREE.BoxBufferGeometry( 100, 100, 100, 1, 1, 1 );
-
-var cubeMesh = new THREE.Mesh( cubeGeometry, cubeSidesMaterial );
-
-scene.add( cubeMesh );
-		</code>
-
-		<h2>Constructor</h2>
-
-
-		<h3>[name]( [page:Array materials] )</h3>
-		<div>
-		[page:Array materials] -- an array of [page:Material Materials] to be used in the MultiMaterial.<br /><br />
-
-		Creates a new [name].
-		</div>
-
-
-		<h2>Properties</h2>
-
-		<h3>[property:Boolean isMultiMaterial]</h3>
-		<div>
-			Used to check whether this or derived classes are multi materials. Default is *true*.<br /><br />
-
-			You should not change this, as it used internally for optimisation.
-		</div>
-
-		<h3>[property:Array materials]</h3>
-		<div>An array containing the materials being used by the MultiMaterial.</div>
-
-		<h3>[property:String uuid]</h3>
-		<div>
-		[link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID] of this material instance.
-		This gets automatically assigned, so this shouldn't be edited.
-		</div>
-
-		<h3>[property:Array visible]</h3>
-		<div>Whether or not [page:Mesh meshes] using this material should be rendered.</div>
-
-		<h2>Methods</h2>
-
-		<h3>[method:MultiMaterial clone]()</h3>
-		<div>Return a clone of this MultiMaterial.</div>
-
-		<h3>[method:null toJSON]( [page:object meta] )</h3>
-		<div>
-		meta -- object containing metadata such as textures or images for the material.<br />
-		Convert the material to three.js JSON format.
-		</div>
-		<h2>Source</h2>
-
-		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
-	</body>
-</html>

+ 11 - 3
docs/api/materials/ShaderMaterial.html

@@ -86,13 +86,14 @@
 		var material = new THREE.ShaderMaterial( {
 
 			uniforms: {
+
 				time: { value: 1.0 },
 				resolution: { value: new THREE.Vector2() }
+
 			},
-			attributes: {
-				vertexOpacity: { value: [] }
-			},
+
 			vertexShader: document.getElementById( 'vertexShader' ).textContent,
+
 			fragmentShader: document.getElementById( 'fragmentShader' ).textContent
 
 		} );
@@ -234,6 +235,13 @@
 			</code>
 			</p>
 
+			<p>
+			You're recommended to update custom [page:Uniform] values depending on [page:Object3D object] and [page:Camera camera]
+			in [page:Object3D.onBeforeRender] because [page:Material] can be shared among [page:Mesh meshes], [page:Matrix4 matrixWorld]
+			of [page:Scene] and [page:Camera] are updated in [page:WebGLRenderer.render], and some effects(ex:VREffect) render a [page:Scene scene]
+			with private their own [page:Camera cameras].
+			</p>
+
 		</div>
 
 		<h2>Constructor</h2>

+ 7 - 3
docs/api/materials/ShadowMaterial.html

@@ -13,11 +13,11 @@
 		<h1>[name]</h1>
 
 		<div class="desc">
-		This material can recieve shadows, but otherwise is completely transparent.
+		This material can receive shadows, but otherwise is completely transparent.
 		</div>
 
 		<h3>Example</h3>
-		[example:webgl_geometry_spline_editor gemoetry / spline / editor]
+		[example:webgl_geometry_spline_editor geometry / spline / editor]
 
 		<code>
 var planeGeometry = new THREE.PlaneGeometry( 2000, 2000 );
@@ -34,7 +34,11 @@ scene.add( plane );
 
 		<h2>Constructor</h2>
 
-		<h3>[name]( )</h3>
+		<h3>[name]( [page:Object parameters] )</h3>
+		<div>
+			[page:Object parameters] - (optional) an object with one or more properties defining the material's appearance.
+			Any property of the material (including any property inherited from [page:Material] and [page:ShaderMaterial]) can be passed in here.<br /><br />
+		</div>
 
 
 		<h2>Properties</h2>

+ 12 - 2
docs/api/math/Box3.html

@@ -112,6 +112,15 @@
 		Returns true if this box and [page:Box3 box] share the same lower and upper bounds.
 		</div>
 
+		<h3>[method:Box3 expandByObject]( [page:Object3D object] )</h3>
+		<div>
+		[page:Object3D object] - [page:Object3D] to expand the box by.<br /><br />
+
+		Expands the boundaries of this box to include [page:Object3D object] and its children,
+		accounting for the object's, and children's, world transforms.
+
+		</div>
+
 		<h3>[method:Box3 expandByPoint]( [page:Vector3 point] )</h3>
 		<div>
 		[page:Vector3 point] - [page:Vector3] that should be included in the box.<br /><br />
@@ -167,7 +176,7 @@
 			[page:Vector3 optionalTarget] — (optional) if specified, the result will be copied into this Vector3,
 			otherwise a new Vector3 will be created. <br /><br />
 
-		Returns the width and height of this box.
+		Returns the width, height and depth of this box.
 		</div>
 
 		<h3>[method:Box3 intersect]( [page:Box3 box] )</h3>
@@ -255,7 +264,8 @@
 		[page:Object3D object] - [page:Object3D] to compute the bounding box of.<br /><br />
 
 		Computes the world-axis-aligned bounding box of an [page:Object3D] (including its children),
-		accounting for the world transforms of both the object and its childrens.
+		accounting for the object's, and children's, world transforms.
+
 		</div>
 
 		<h3>[method:Box3 setFromPoints]( [page:Array points] )</h3>

+ 37 - 37
docs/api/math/Color.html

@@ -44,22 +44,22 @@ var color = new THREE.Color( 1, 0, 0 );
 		<h2>Constructor</h2>
 
 
-		<h3>[name]( [page:Multi r], [page:Float g], [page:Float b] )</h3>
+		<h3>[name]( [page:Color_Hex_or_String r], [page:Float g], [page:Float b] )</h3>
 		<div>
-		[page:Multi r] - (optional) the red component of the color if arguments g and b are defined.
-		If they are not defined, it can be a [link:https://en.wikipedia.org/wiki/Web_colors#Hex_triplet hexadecimal triplet] (recommended) or a CSS-style string or another Color instance.<br />
-		[page:Float g] - (optional) The green component of the color if it is defined.<br />
-		[page:Float b] - (optional) The blue component of the color if it is defined.<br /><br />
+		[page:Color_Hex_or_String r] - (optional) If arguments [page:Float g] and [page:Float b] are defined, the red component of the color.
+		If they are not defined, it can be a [link:https://en.wikipedia.org/wiki/Web_colors#Hex_triplet hexadecimal triplet] (recommended), a CSS-style string, or another Color instance.<br />
+		[page:Float g] - (optional) If it is defined, the green component of the color.<br />
+		[page:Float b] - (optional) If it is defined, the blue component of the color.<br /><br />
 
 		Note that standard method of specifying color in three.js is with a [link:https://en.wikipedia.org/wiki/Web_colors#Hex_triplet hexadecimal triplet], and that method is used
 		throughout the rest of the documentation.<br /><br />
 
-		When all arguments are defined then r is the red component, g is the green component and b is the blue component of the color.<br />
-		When only r is defined:<br />
+		When all arguments are defined then [page:Color_Hex_or_String r] is the red component, [page:Float g] is the green component and [page:Float b] is the blue component of the color.<br />
+		When only [page:Color_Hex_or_String r] is defined:<br />
 		<ul>
 			<li>It can be a [link:https://en.wikipedia.org/wiki/Web_colors#Hex_triplet hexadecimal triplet] representing the color (recommended).</li>
 			<li>It can be an another Color instance.</li>
-			<li>It can be a CSS style string. For Instance:
+			<li>It can be a CSS-style string. For example:
 				<ul>
 					<li>'rgb(250, 0,0)'</li>
 					<li>'rgb(100%,0%,0%)'</li>
@@ -114,7 +114,7 @@ var color = new THREE.Color( 1, 0, 0 );
 		<div>Adds [page:Number s] to the RGB values of this color.</div>
 
 		<h3>[method:Color clone]() </h3>
-		<div>Returns a new Color with the same  [page:.r r], [page:.g g] and [page:.b b] parameters a this one.</div>
+		<div>Returns a new Color with the same [page:.r r], [page:.g g] and [page:.b b] values as this one.</div>
 
 		<h3>[method:Color copy]( [page:Color color] ) </h3>
 		<div>
@@ -122,17 +122,17 @@ var color = new THREE.Color( 1, 0, 0 );
 		</div>
 
 		<h3>[method:Color convertGammaToLinear]() </h3>
-		<div>Converts this color from gamma to linear space (squares the values of [page:.r r], [page:.g g] and [page:.b b] ).</div>
+		<div>Converts this color from gamma to linear space by squaring the values of [page:.r r], [page:.g g] and [page:.b b] ).</div>
 
 		<h3>[method:Color convertLinearToGamma]() </h3>
-		<div>Converts this color from linear to gamma space (takes the squareroot of [page:.r r], [page:.g g] and [page:.b b]).</div>
+		<div>Converts this color from linear to gamma space by taking the square root of [page:.r r], [page:.g g] and [page:.b b]).</div>
 
 		<h3>[method:Color copyGammaToLinear]( [page:Color color], [page:Float gammaFactor] ) </h3>
 		<div>
 		[page:Color color] — Color to copy.<br />
 		[page:Float gammaFactor] - (optional). Default is *2.0*.<br /><br />
 
-		Copies given color making conversion from gamma to linear space,
+		Copies the given color into this color while converting it from gamma to linear space
 		by taking [page:.r r], [page:.g g] and [page:.b b] to the power of [page:Float gammaFactor].
 		</div>
 
@@ -141,16 +141,16 @@ var color = new THREE.Color( 1, 0, 0 );
 		[page:Color color] — Color to copy.<br />
 		[page:Float gammaFactor] - (optional). Default is *2.0*.<br /><br />
 
-		Copies given color making conversion from linear to gamma space,
+		Copies the given color into this color while converting it from linear to gamma space
 		by taking [page:.r r], [page:.g g] and [page:.b b] to the power of 1 / [page:Float gammaFactor].
 		</div>
 
 		<h3>[method:Boolean equals]( [page:Color color] ) </h3>
-		<div>Compares [page:Color color] with this one and returns true if they are the same, false otherwise.</div>
+		<div>Compares the RGB values of [page:Color color] with those of this object. Returns true if they are the same, false otherwise.</div>
 
 		<h3>[method:Color fromArray]( [page:Array array], [page:Integer offset] ) </h3>
 		<div>
-		[page:Array array] - [page:Array] of float in the form [ [page:Float r], [page:Float g], [page:Float b] ].<br />
+		[page:Array array] - [page:Array] of floats in the form [ [page:Float r], [page:Float g], [page:Float b] ].<br />
 		[page:Integer offset] - An optional offset into the array.<br /><br />
 
 		Sets this color's components based on an array formatted like [ [page:Float r], [page:Float g], [page:Float b] ].
@@ -160,14 +160,14 @@ var color = new THREE.Color( 1, 0, 0 );
 		<div>Returns the hexadecimal value of this color.</div>
 
 		<h3>[method:String getHexString]()</h3>
-		<div>Returns the string formatted hexadecimal value of this color.</div>
+		<div>Returns the hexadecimal value of this color as a string (for example, 'FFFFFF').</div>
 
 		<h3>[method:Object getHSL]( [page:Object optionalTarget] )</h3>
 		<div>
-			[page:Object optionalTarget] — (optional) if specified, adds h, s and l keys to object (if not already present)
-			and sets the results there, otherwise a new Object will be created. <br /><br />
+			[page:Object optionalTarget] — (optional) if specified, adds h, s and l keys to the object (if not already present)
+			and sets the results there. Otherwise, a new Object will be created. <br /><br />
 
-			Convert the values [page:.r r], [page:.g g] and [page:.b b] to [link:https://en.wikipedia.org/wiki/HSL_and_HSV HSL]
+			Convert this Color's [page:.r r], [page:.g g] and [page:.b b] values to [link:https://en.wikipedia.org/wiki/HSL_and_HSV HSL]
 			format and returns an object of the form:
 
 			<code>
@@ -177,37 +177,37 @@ var color = new THREE.Color( 1, 0, 0 );
 		</div>
 
 		<h3>[method:String getStyle]()</h3>
-		<div>Returns the value of this color as a CSS-style string. Example: 'rgb(255,0,0)'.</div>
+		<div>Returns the value of this color as a CSS style string. Example: 'rgb(255,0,0)'.</div>
 
 		<h3>[method:Color lerp]( [page:Color color], [page:Float alpha] ) </h3>
 		<div>
 		[page:Color color] - color to converge on.<br />
 		[page:Float alpha] - interpolation factor in the closed interval [0, 1].<br /><br />
 
-		Linear interpolation of this colors RGB values and the RGB values of the passed argument.
-		The alpha argument can be thought of as the percent between the two colors, where 0 is
-		this color and 1 is the first argument.
+		Linearly interpolates this color's RGB values toward the RGB values of the passed argument.
+		The alpha argument can be thought of as the ratio between the two colors, where 0.0 is
+		this color and 1.0 is the first argument.
 		</div>
 
 		<h3>[method:Color multiply]( [page:Color color] ) </h3>
-		<div>Multiplies this color's RGB values by given [page:Color color]'s RGB values.</div>
+		<div>Multiplies this color's RGB values by the given [page:Color color]'s RGB values.</div>
 
 		<h3>[method:Color multiplyScalar]( [page:Number s] ) </h3>
 		<div>Multiplies this color's RGB values by [page:Number s].</div>
 
 		<h3>[method:Color offsetHSL]( [page:Float h], [page:Float s], [page:Float l] ) </h3>
 		<div>
-			Adds given [page:Float h], [page:Float s], and [page:Float l] to this color's existing values.
-			Internally this converts the [page:.r r], [page:.g g] and [page:.b b] values to HSL, adds
-			[page:Float h], [page:Float s], and [page:Float l] and then converts back to RGB.
+			Adds the given [page:Float h], [page:Float s], and [page:Float l] to this color's values.
+			Internally, this converts the color's [page:.r r], [page:.g g] and [page:.b b] values to HSL, adds
+			[page:Float h], [page:Float s], and [page:Float l], and then converts the color back to RGB.
 		</div>
 
-		<h3>[method:Color set]( [page:Multi value] ) </h3>
+		<h3>[method:Color set]( [page:Color_Hex_or_String value] ) </h3>
 		<div>
-		[page:Multi value] - Value to set this color to.<br /><br />
+		[page:Color_Hex_or_String value] - Value to set this color to.<br /><br />
 
-		See the Constructor above for full details of what [page:Multi value] can be.
-		Delegates to [page:.copy], .setStyle, or .setHex depending on input type.
+		See the Constructor above for full details of what [page:Color_Hex_or_String value] can be.
+		Delegates to [page:.copy], [page:.setStyle], or [page:.setHex] depending on input type.
 		</div>
 
 		<h3>[method:Color setHex]( [page:Integer hex] ) </h3>
@@ -228,9 +228,9 @@ var color = new THREE.Color( 1, 0, 0 );
 
 		<h3>[method:Color setRGB]( [page:Float r], [page:Float g], [page:Float b] ) </h3>
 		<div>
-		[page:Float r] — Red channel value between 0 and 1.<br />
-		[page:Float g] — Green channel value between 0 and 1.<br />
-		[page:Float b] — Blue channel value between 0 and 1.<br /><br />
+		[page:Float r] — Red channel value between 0.0 and 1.0.<br />
+		[page:Float g] — Green channel value between 0.0 and 1.0.<br />
+		[page:Float b] — Blue channel value between 0.0 and 1.0.<br /><br />
 
 		Sets this color from RGB values.
 		</div>
@@ -255,7 +255,7 @@ var color = new THREE.Color( 1, 0, 0 );
 		"red" ( or any [link:https://en.wikipedia.org/wiki/X11_color_names#Color_name_chart X11 color name]
 		- all 140 color names are supported ).<br />
 
-		Transluent colors such as "rgba(255, 0, 0, 0.5)" and "hsla(0, 100%, 50%, 0.5)" are also accepted,
+		Translucent colors such as "rgba(255, 0, 0, 0.5)" and "hsla(0, 100%, 50%, 0.5)" are also accepted,
 		but the alpha-channel coordinate will be discarded.<br /><br />
 
 		Note that for X11 color names, multiple words such as Dark Orange become the string 'darkorange' (all lowercase).
@@ -263,8 +263,8 @@ var color = new THREE.Color( 1, 0, 0 );
 
 		<h3>[method:Color sub]( [page:Color color] ) </h3>
 		<div>
-		Subtracts RGB components of the given color from the RGB components of this color.
-		If a component is negative, it is set to zero.
+		Subtracts the RGB components of the given color from the RGB components of this color.
+		If this results in a negative component, that component is set to zero.
 		</div>
 
 		<h3>[method:Array toArray]( [page:Array array], [page:Integer offset] ) </h3>

+ 6 - 6
docs/api/math/Line3.html

@@ -40,7 +40,7 @@
 		<h2>Methods</h2>
 
 		<h3>[method:Line3 applyMatrix4]( [page:Matrix4 matrix] )</h3>
-		<div>Apply a matrix transform to the line segment.</div>
+		<div>Applies a matrix transform to the line segment.</div>
 
 		<h3>[method:Vector3 at]( [page:Float t], [page:Vector3 optionalTarget] )</h3>
 		<div>
@@ -48,12 +48,12 @@
 		[page:Vector3 optionalTarget] - (optional) if specified, the result will be copied into this [page:Vector3],
 		otherwise a new [page:Vector3] will be created.<br /><br />
 
-		Return a vector at a certain position along the line. When [page:Float t] = 0, it returns the start vector,
+		Returns a vector at a certain position along the line. When [page:Float t] = 0, it returns the start vector,
 		and when [page:Float t] = 1 it returns the end vector.<br />
 		</div>
 
 		<h3>[method:Line3 clone]()</h3>
-		<div>Return a new [page:Line3] with the same [page:.start start] and [page:.end end] vectors as this one.</div>
+		<div>Returns a new [page:Line3] with the same [page:.start start] and [page:.end end] vectors as this one.</div>
 
 		<h3>[method:Vector3 closestPointToPoint]( [page:Vector3 point], [page:Boolean clampToLine], [page:Vector3 optionalTarget] )</h3>
 		<div>
@@ -72,7 +72,7 @@
 		[page:Boolean clampToLine] - Whether to clamp the result to the range [0, 1].<br /><br />
 
 		Returns a point parameter based on the closest point as projected on the line segement.
-		If clamp to line is true, then the returned value will be between 0 and 1.
+		If [page:Boolean clampToLine] is true, then the returned value will be between 0 and 1.
 		</div>
 
 		<h3>[method:Line3 copy]( [page:Line3 line] )</h3>
@@ -109,13 +109,13 @@
 			[page:Vector3 optionalTarget] - (optional) if specified, the result will be copied into this [page:Vector3],
 			otherwise a new [page:Vector3] will be created.<br /><br />
 
-		Return the center of the line segment.
+		Returns the center of the line segment.
 		</div>
 
 		<h3>[method:Line3 set]( [page:Vector3 start], [page:Vector3 end] )</h3>
 		<div>
 		[page:Vector3 start] - set the [page:.start start point] of the line.<br />
-		end - [page:Vector3] - set the [page:.end end point] of the line.<br /><br />
+		[page:Vector3 end] - set the [page:.end end point] of the line.<br /><br />
 
 		Sets the start and end values by copying the provided vectors.
 		</div>

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

@@ -30,7 +30,7 @@
 		<div>
 		[page:Integer n], [page:Integer m] - Integers<br /><br />
 
-		Compute the Euclidean modulo of m % [page:Integer n], that is:
+		Computes the Euclidean modulo of [page:Integer m] % [page:Integer n], that is:
 		<code>( ( n % m ) + m ) % m</code>
 		</div>
 
@@ -71,10 +71,10 @@
 		</div>
 
 		<h3>[method:Integer nearestPowerOfTwo]( [page:Number n] )</h3>
-		<div>	Return the nearest power of 2 to a given number [page:Number n].</div>
+		<div>	Returns the nearest power of 2 to a given number [page:Number n].</div>
 
 		<h3>[method:Integer nextPowerOfTwo]( [page:Number n] )</h3>
-		<div>Return the nearest power of 2 that is bigger than [page:Number n].</div>
+		<div>Returns the nearest power of 2 that is bigger than [page:Number n].</div>
 
 		<h3>[method:Float radToDeg]( [page:Float radians] )</h3>
 		<div>Converts radians to degrees.</div>
@@ -83,7 +83,7 @@
 		<div>Random float in the interval [page:Float low] to [page:Float high].</div>
 
 		<h3>[method:Float randFloatSpread]( [page:Float range] )</h3>
-		<div>Random float in the intercal *- [page:Float range] / 2* to *[page:Float range] / 2*.</div>
+		<div>Random float in the interval *- [page:Float range] / 2* to *[page:Float range] / 2*.</div>
 
 		<h3>[method:Integer randInt]( [page:Integer low], [page:Integer high] )</h3>
 		<div>Random integer in the interval [page:Float low] to [page:Float high].</div>

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

@@ -92,6 +92,9 @@ m.elements = [ 11, 21, 31,
 		[link:https://en.wikipedia.org/wiki/Determinant determinant] of this matrix.
 		</div>
 
+		<h3>[method:Boolean equals]( [page:Matrix3 m] )</h3>
+		<div>Return true if this matrix and [page:Matrix3 m] are equal.</div>
+
 		<h3>[method:Matrix3 fromArray]( [page:Array array], [page:Integer offset] )</h3>
 		<div>
 		[page:Array array] - the array to read the elements from.<br />
@@ -132,6 +135,12 @@ m.elements = [ 11, 21, 31,
 
 		</div>
 
+		<h3>[method:Matrix3 multiply]( [page:Matrix3 m] )</h3>
+		<div>Post-multiplies this matrix by [page:Matrix3 m].</div>
+
+		<h3>[method:Matrix3 multiplyMatrices]( [page:Matrix3 a], [page:Matrix3 b] )</h3>
+		<div>Sets this matrix to [page:Matrix3 a] x [page:Matrix3 b].</div>
+
 		<h3>[method:Matrix3 multiplyScalar]( [page:Float s] )</h3>
 		<div>Multiplies every component of the matrix by the scalar value *s*.</div>
 
@@ -154,6 +163,9 @@ m.elements = [ 11, 21, 31,
 		sequence of values.
 		</div>
 
+		<h3>[method:Matrix3 premultiply]( [page:Matrix3 m] )</h3>
+		<div>Pre-multiplies this matrix by [page:Matrix3 m].</div>
+
 		<h3>[method:Matrix3 setFromMatrix4]( [page:Matrix4 m] )</h3>
 		<div>Set this matrx to the upper 3x3 matrix of the Matrix4 [page:Matrix4 m].</div>
 

+ 8 - 6
docs/api/math/Matrix4.html

@@ -29,23 +29,25 @@
 					[page:Object3D.matrix]: This stores the local transform of the object.
 				</li>
 				<li>
-					[page:Object3D.matrixWorld]: The global or world transform of the object. This is the objects transformation relative to its parent.
+					[page:Object3D.matrixWorld]: The global or world transform of the object. This is the object's transformation relative to its parent.
 					If the object has no parent, then this is identical to the local transform.
 				</li>
 				<li>
-					[page:Object3D.modelViewMatrix]:
+					[page:Object3D.modelViewMatrix]: This represents the object's transformation relative to the camera's coordinate system.
+					An object's modelViewMatrix is the object's matrixWorld pre-multiplied by the camera's matrixWorldInverse.
 				</li>
 			</ul>
 
-			[page:Camera Cameras] have two additional matrix4s:
+			[page:Camera Cameras] have two additional Matrix4s:
 			<ul>
 				<li>
-					[page:Object3D.matrixWorldInverse]: The inverse of the [page:Object3D.matrixWorld] described above.
+					[page:Camera.matrixWorldInverse]: The view matrix - the inverse of the Camera's [page:Object3D.matrixWorld matrixWorld].
 				</li>
 				<li>
-					[page:Object3D.projectionMatrix]:
+					[page:Camera.projectionMatrix]: Represents the information how to project the scene to clip space.
 				</li>
 			</ul>
+			Note: [page:Object3D.normalMatrix] is not a Matrix4, but a [page:Matrix3].
 		</div>
 
 		<h2>A Note on Row-Major and Column-Major Ordering</h2>
@@ -166,7 +168,7 @@ m, n, o, p
 		then the [page:Vector3 xAxis], [page:Vector3 yAxis], [page:Vector3 zAxis] will be set to:
 		<code>
 xAxis = (a, e, i)
-yAxis = (d, f, j)
+yAxis = (b, f, j)
 zAxis = (c, g, k)
 		</code>
 		</div>

+ 6 - 6
docs/api/math/Quaternion.html

@@ -89,7 +89,7 @@
 
 		<h3>[method:Float dot]( [page:Quaternion v] )</h3>
 		<div>
-			Calculate the [link:https://en.wikipedia.org/wiki/Dot_product dot product] of
+			Calculates the [link:https://en.wikipedia.org/wiki/Dot_product dot product] of
 			quaternions [page:Quaternion v] and this one.
 		</div>
 
@@ -137,11 +137,11 @@
 		</div>
 
 		<h3>[method:Quaternion onChange]( [page:Function onChangeCallback] )</h3>
-		<div>Set the [page:.onChangeCallback onChangeCallback]() method.</div>
+		<div>Sets the [page:.onChangeCallback onChangeCallback]() method.</div>
 
 		<h3>[method:Quaternion onChangeCallback]( )</h3>
 		<div>
-			This function is called whenever and of the following occur:
+			This function is called whenever any of the following occurs:
 			<ul>
 				<li>
 					The [page:.x x], [page:.y y], [page:.z z] or
@@ -188,7 +188,7 @@
 		<div>
 		Sets this quaternion from rotation specified by [page:Vector3 axis] and [page:Float angle].<br />
 		Adapted from the method [link:http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm here].<br />
-		*Axis* is asumed to be normalized, *angle* is in radians.
+		*Axis* is assumed to be normalized, *angle* is in radians.
 		</div>
 
 		<h3>[method:Quaternion setFromEuler]( [page:Euler euler] )</h3>
@@ -210,8 +210,8 @@
 
 		<h3>[method:Array toArray]( [page:Array array], [page:Integer offset] )</h3>
 		<div>
-		[page:Array array] - An optional array to store the quaternion. If not specified a new array will be created.<br/>
-		[page:Integer offset] - optional) if specified, the result will be copied
+		[page:Array array] - An optional array to store the quaternion. If not specified, a new array will be created.<br/>
+		[page:Integer offset] - (optional) if specified, the result will be copied
 		into this [page:Array].<br /><br />
 
 		Returns the numerical elements of this quaternion in an array of format [x, y, z, w].

+ 20 - 21
docs/api/math/Vector2.html

@@ -54,7 +54,7 @@
 		[page:Float x] - the x value of the vector. Default is *0*.<br />
 		[page:Float y] -  the y value of the vector. Default is *0*.<br /><br />
 
-		Created a new [name].
+		Creates a new [name].
 		</div>
 
 
@@ -64,7 +64,7 @@
 		<div>
 			Used to check whether this or derived classes are Vector2s. Default is *true*.<br /><br />
 
-			You should not change this, as it used internally for optimisation.
+			You should not change this, as it is used internally for optimisation.
 		</div>
 
 		<h3>[property:Float height]</h3>
@@ -84,7 +84,7 @@
 		<div>Adds [page:Vector2 v] to this vector.</div>
 
 		<h3>[method:Vector2 addScalar]( [page:Float s] )</h3>
-		<div>Add the scalar value s to this vector's [page:.x x] and [page:.y y] values.</div>
+		<div>Adds the scalar value [page:Float s] to this vector's [page:.x x] and [page:.y y] values.</div>
 
 		<h3>[method:Vector2 addScaledVector]( [page:Vector2 v], [page:Float s] )</h3>
 		<div>Adds the multiple of [page:Vector2 v] and [page:Float s] to this vector.</div>
@@ -131,13 +131,13 @@
 
 		<h3>[method:Vector2 clone]()</h3>
 		<div>
-		Returns a new vector2 with the same [page:.x x] and [page:.y y] values as this one.
+		Returns a new Vector2 with the same [page:.x x] and [page:.y y] values as this one.
 		</div>
 
 		<h3>[method:Vector2 copy]( [page:Vector2 v] )</h3>
 		<div>
-			Copies the values of the passed vector2's [page:.x x] and [page:.y y]
-			properties to this vector2.
+			Copies the values of the passed Vector2's [page:.x x] and [page:.y y]
+			properties to this Vector2.
 		</div>
 
 		<h3>[method:Float distanceTo]( [page:Vector2 v] )</h3>
@@ -166,7 +166,7 @@
 
 		<h3>[method:Float dot]( [page:Vector2 v] )</h3>
 		<div>
-		Calculate the [link:https://en.wikipedia.org/wiki/Dot_product dot product] of this
+		Calculates the [link:https://en.wikipedia.org/wiki/Dot_product dot product] of this
 	  vector and [page:Vector2 v].
 		</div>
 
@@ -179,9 +179,9 @@
 		<h3>[method:Vector2 fromArray]( [page:Array array], [page:Integer offset] )</h3>
 		<div>
 		[page:Array array] - the source array.<br />
-		[page:Integer offset] - ( optional) offset into the array. Default is 0.<br /><br />
+		[page:Integer offset] - (optional) offset into the array. Default is 0.<br /><br />
 
-		Sets this vector's [page:.x x] value to be array[0] and [page:.y y] value to be array[1].
+		Sets this vector's [page:.x x] value to be array[ offset ] and [page:.y y] value to be array[ offset + 1 ].
 		</div>
 
 		<h3>[method:Vector2 fromBufferAttribute]( [page:BufferAttribute attribute], [page:Integer index] )</h3>
@@ -221,7 +221,7 @@
 		[page:Vector2 v] - [page:Vector2] to interpolate towards.<br />
 		alpha - interpolation factor in the closed interval [0, 1].<br /><br />
 
-		Linearly interpolate between this vector and [page:Vector2 v], where alpha is the
+		Linearly interpolates between this vector and [page:Vector2 v], where alpha is the
 		distance along the line - alpha = 0 will be this vector, and alpha = 1 will be [page:Vector2 v].
 		</div>
 
@@ -241,19 +241,19 @@
 
 		<h3>[method:Vector2 normalize]()</h3>
 		<div>
-		Convert this vector to a [link:https://en.wikipedia.org/wiki/Unit_vector unit vector] - that is, sets it equal to the vector with the same direction
+		Converts this vector to a [link:https://en.wikipedia.org/wiki/Unit_vector unit vector] - that is, sets it equal to the vector with the same direction
 		as this one, but [page:.length length] 1.
 		</div>
 
 		<h3>[method:Vector2 max]( [page:Vector2 v] )</h3>
 		<div>
-		If this vector's x or y value is less than [page:Vector2 v's] x or y value, replace
+		If this vector's x or y value is less than [page:Vector2 v]'s x or y value, replace
 		that value with the corresponding max value.
 		</div>
 
 		<h3>[method:Vector2 min]( [page:Vector2 v] )</h3>
 		<div>
-		If this vector's x or y value is greater than [page:Vector2 v's] x or y value, replace
+		If this vector's x or y value is greater than [page:Vector2 v]'s x or y value, replace
 		that value with the corresponding min value.
 		</div>
 
@@ -269,7 +269,7 @@
 			[page:Vector2 center] - the point around which to rotate.<br />
 			[page:float angle] - the angle to rotate, in radians.<br /><br />
 
-			Rotate the vector arounf [page:Vector2 center] by [page:float angle] radians.
+			Rotates the vector around [page:Vector2 center] by [page:float angle] radians.
 		</div>
 
 		<h3>[method:Vector2 round]()</h3>
@@ -294,34 +294,33 @@
 
 		<h3>[method:Vector2 setLength]( [page:Float l] )</h3>
 		<div>
-		Set this vector to the vector with the same direction as this one, but [page:.length length]
+		Sets this vector to the vector with the same direction as this one, but [page:.length length]
 		[page:Float l].
 		</div>
 
 		<h3>[method:Vector2 setScalar]( [page:Float scalar] )</h3>
 		<div>
-		Set the [page:.x x] and [page:.y y] values of this vector both equal to [page:Float scalar].
+		Sets the [page:.x x] and [page:.y y] values of this vector both equal to [page:Float scalar].
 		</div>
 
 		<h3>[method:Vector2 setX]( [page:Float x] )</h3>
-		<div>Replace this vector's [page:.x x] value with [page:Float x].</div>
+		<div>Replaces this vector's [page:.x x] value with [page:Float x].</div>
 
 		<h3>[method:Vector2 setY]( [page:Float y] )</h3>
-		<div>Replace this vector's [page:.y y] value with [page:Float y].</div>
+		<div>Replaces this vector's [page:.y y] value with [page:Float y].</div>
 
 		<h3>[method:Vector2 sub]( [page:Vector2 v] )</h3>
 		<div>Subtracts [page:Vector2 v] from this vector.</div>
 
 		<h3>[method:Vector2 subScalar]( [page:Float s] )</h3>
-		<div>Subtracts [page:Float s]  from this vector's [page:.x x] and [page:.y y] compnents.</div>
+		<div>Subtracts [page:Float s]  from this vector's [page:.x x] and [page:.y y] components.</div>
 
 		<h3>[method:Vector2 subVectors]( [page:Vector2 a], [page:Vector2 b] )</h3>
 		<div>Sets this vector to [page:Vector2 a] - [page:Vector2 b].</div>
 
 		<h3>[method:Array toArray]( [page:Array array], [page:Integer offset] )</h3>
 		<div>
-		[page:Array array] - (optional) array to store the vector to. If this is not provided
-		a new array will be created.<br />
+		[page:Array array] - (optional) array to store the vector to. If this is not provided, a new array will be created.<br />
 		[page:Integer offset] - (optional) optional offset into the array.<br /><br />
 
 		Returns an array [x, y], or copies x and y into the provided [page:Array array].

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

@@ -65,7 +65,7 @@ var d = a.distanceTo( b );
 		<div>
 			Used to check whether this or derived classes are Vector3s. Default is *true*.<br /><br />
 
-			You should not change this, as it used internally for optimisation.
+			You should not change this, as it is used internally for optimisation.
 		</div>
 
 		<h3>[property:Float x]</h3>
@@ -81,7 +81,7 @@ var d = a.distanceTo( b );
 		<div>Adds [page:Vector3 v] to this vector.</div>
 
 		<h3>[method:Vector3 addScalar]( [page:Float s] )</h3>
-		<div>Add the scalar value s to this vector's [page:.x x], [page:.y y] and [page:.z z] values.</div>
+		<div>Adds the scalar value s to this vector's [page:.x x], [page:.y y] and [page:.z z] values.</div>
 
 		<h3>[method:Vector3 addScaledVector]( [page:Vector3 v], [page:Float s] )</h3>
 		<div>Adds the multiple of [page:Vector3 v] and [page:Float s] to this vector.</div>
@@ -104,7 +104,7 @@ var d = a.distanceTo( b );
 		</div>
 
 		<h3>[method:Vector3 applyMatrix3]( [page:Matrix3 m] )</h3>
-		<div>Multiply this vector by [page:Matrix3 m]</div>
+		<div>Multiplies this vector by [page:Matrix3 m]</div>
 
 		<h3>[method:Vector3 applyMatrix4]( [page:Matrix4 m] )</h3>
 		<div>
@@ -284,13 +284,13 @@ var d = a.distanceTo( b );
 
 		<h3>[method:Vector3 max]( [page:Vector3 v] )</h3>
 		<div>
-		If this vector's x, y or z value is less than [page:Vector3 v's] x, y or z value, replace
+		If this vector's x, y or z value is less than [page:Vector3 v]'s x, y or z value, replace
 		that value with the corresponding max value.
 		</div>
 
 		<h3>[method:Vector3 min]( [page:Vector3 v] )</h3>
 		<div>
-		If this vector's x, y or z value is greater than [page:Vector3 v's] x, y or z value, replace
+		If this vector's x, y or z value is greater than [page:Vector3 v]'s x, y or z value, replace
 		that value with the corresponding min value.
 		</div>
 

+ 18 - 19
docs/api/math/Vector4.html

@@ -22,7 +22,7 @@
 			<li>
 				A direction and length in 4D space. In three.js the length will always be the
 				[link:https://en.wikipedia.org/wiki/Euclidean_distance Euclidean distance]
-				(straight-line distance) from (0, 0, 0, 0, 0) to (x, y, z, w) and the direction is also
+				(straight-line distance) from (0, 0, 0, 0) to (x, y, z, w) and the direction is also
 				measured from (0, 0, 0, 0) towards (x, y, z, w).
 			</li>
 			<li>
@@ -42,7 +42,7 @@ var a = new THREE.Vector4( 0, 1, 0, 0 );
 //no arguments; will be initialised to (0, 0, 0, 1)
 var b = new THREE.Vector4( );
 
-var d = a.distanceTo( b );
+var d = a.dot( b );
 		</code>
 
 
@@ -65,7 +65,7 @@ var d = a.distanceTo( b );
 		<div>
 			Used to check whether this or derived classes are Vector4s. Default is *true*.<br /><br />
 
-			You should not change this, as it used internally for optimisation.
+			You should not change this, as it is used internally for optimisation.
 		</div>
 
 		<h3>[property:Float x]</h3>
@@ -83,7 +83,7 @@ var d = a.distanceTo( b );
 		<div>Adds [page:Vector4 v] to this vector.</div>
 
 		<h3>[method:Vector4 addScalar]( [page:Float s] )</h3>
-		<div>Add the scalar value s to this vector's [page:.x x], [page:.y y], [page:.z z] and [page:.w w] values.</div>
+		<div>Adds the scalar value s to this vector's [page:.x x], [page:.y y], [page:.z z] and [page:.w w] values.</div>
 
 		<h3>[method:Vector4 addScaledVector]( [page:Vector4 v], [page:Float s] )</h3>
 		<div>Adds the multiple of [page:Vector4 v] and [page:Float s] to this vector.</div>
@@ -93,7 +93,7 @@ var d = a.distanceTo( b );
 
 		<h3>[method:Vector4 applyMatrix4]( [page:Matrix4 m] )</h3>
 		<div>
-		Multiply this vector by 4 x 4 [page:Matrix4 m].
+		Multiplies this vector by 4 x 4 [page:Matrix4 m].
 		</div>
 
 		<h3>[method:Vector4 ceil]()</h3>
@@ -138,7 +138,7 @@ var d = a.distanceTo( b );
 
 		<h3>[method:Float dot]( [page:Vector4 v] )</h3>
 		<div>
-		Calculate the [link:https://en.wikipedia.org/wiki/Dot_product dot product] of this
+		Calculates the [link:https://en.wikipedia.org/wiki/Dot_product dot product] of this
 		vector and [page:Vector4 v].
 		</div>
 
@@ -151,7 +151,7 @@ var d = a.distanceTo( b );
 		<h3>[method:Vector4 fromArray]( [page:Array array], [page:Integer offset] )</h3>
 		<div>
 		[page:Array array] - the source array.<br />
-		[page:Integer offset] - ( optional) offset into the array. Default is 0.<br /><br />
+		[page:Integer offset] - (optional) offset into the array. Default is 0.<br /><br />
 
 		Sets this vector's [page:.x x] value to be array[ offset + 0 ], [page:.y y] value to be array[ offset + 1 ]
 		[page:.z z] value to be array[ offset + 2 ] and [page:.w w ] value to be array[ offset + 3 ].
@@ -196,7 +196,7 @@ var d = a.distanceTo( b );
 		[page:Vector4 v] - [page:Vector4] to interpolate towards.<br />
 		alpha - interpolation factor in the closed interval [0, 1].<br /><br />
 
-		Linearly interpolate between this vector and [page:Vector4 v], where alpha is the
+		Linearly interpolates between this vector and [page:Vector4 v], where alpha is the
 		distance along the line - alpha = 0 will be this vector, and alpha = 1 will be [page:Vector4 v].
 		</div>
 
@@ -216,7 +216,7 @@ var d = a.distanceTo( b );
 
 		<h3>[method:Vector4 normalize]()</h3>
 		<div>
-		Convert this vector to a [link:https://en.wikipedia.org/wiki/Unit_vector unit vector] - that is, sets it equal to the vector with the same direction
+		Converts this vector to a [link:https://en.wikipedia.org/wiki/Unit_vector unit vector] - that is, sets it equal to the vector with the same direction
 		as this one, but [page:.length length] 1.
 		</div>
 
@@ -250,7 +250,7 @@ var d = a.distanceTo( b );
 		<div>
 			[page:Quaterion q] - a normalized [page:Quaterion]<br /><br />
 
-			Set the [page:.x x], [page:.y y] and [page:.z z] components of this vector to the
+			Sets the [page:.x x], [page:.y y] and [page:.z z] components of this vector to the
 			quaternion's axis and [page:.w w] to the angle.
 		</div>
 
@@ -258,7 +258,7 @@ var d = a.distanceTo( b );
 		<div>
 			 [page:Matrix4 m] - a [page:Matrix4] of which the upper left 3x3 matrix is a pure rotation matrix.<br /><br />
 
-			Set the [page:.x x], [page:.y y] and [page:.z z] to the axis of rotation and [page:.w w] to the angle.
+			Sets the [page:.x x], [page:.y y] and [page:.z z] to the axis of rotation and [page:.w w] to the angle.
 		</div>
 
 		<h3>[method:null setComponent]( [page:Integer index], [page:Float value] )</h3>
@@ -275,26 +275,26 @@ var d = a.distanceTo( b );
 
 		<h3>[method:Vector4 setLength]( [page:Float l] )</h3>
 		<div>
-		Set this vector to the vector with the same direction as this one, but [page:.length length]
+		Sets this vector to the vector with the same direction as this one, but [page:.length length]
 		[page:Float l].
 		</div>
 
 		<h3>[method:Vector4 setScalar]( [page:Float scalar] )</h3>
 		<div>
-		Set the [page:.x x], [page:.y y], [page:.z z] and [page:.w w] values of this vector both equal to [page:Float scalar].
+		Sets the [page:.x x], [page:.y y], [page:.z z] and [page:.w w] values of this vector both equal to [page:Float scalar].
 		</div>
 
 		<h3>[method:Vector4 setX]( [page:Float x] )</h3>
-		<div>Replace this vector's [page:.x x] value with [page:Float x].</div>
+		<div>Replaces this vector's [page:.x x] value with [page:Float x].</div>
 
 		<h3>[method:Vector4 setY]( [page:Float y] )</h3>
-		<div>Replace this vector's [page:.y y] value with [page:Float y].</div>
+		<div>Replaces this vector's [page:.y y] value with [page:Float y].</div>
 
 		<h3>[method:Vector4 setZ]( [page:Float z] )</h3>
-		<div>Replace this vector's [page:.z z] value with [page:Float z].</div>
+		<div>Replaces this vector's [page:.z z] value with [page:Float z].</div>
 
 		<h3>[method:Vector4 setW]( [page:Float w] )</h3>
-		<div>Replace this vector's [page:.w w] value with [page:Float w].</div>
+		<div>Replaces this vector's [page:.w w] value with [page:Float w].</div>
 
 		<h3>[method:Vector4 sub]( [page:Vector4 v] )</h3>
 		<div>Subtracts [page:Vector4 v] from this vector.</div>
@@ -307,8 +307,7 @@ var d = a.distanceTo( b );
 
 		<h3>[method:Array toArray]( [page:Array array], [page:Integer offset] )</h3>
 		<div>
-		[page:Array array] - (optional) array to store the vector to. If this is not provided
-		a new array will be created.<br />
+		[page:Array array] - (optional) array to store the vector to. If this is not provided, a new array will be created.<br />
 		[page:Integer offset] - (optional) optional offset into the array.<br /><br />
 
 		Returns an array [x, y, z, w], or copies x, y, z and w into the provided [page:Array array].

+ 55 - 0
docs/api/objects/LineLoop.html

@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Object3D] &rarr; [page:Line] &rarr;
+
+		<h1>[name]</h1>
+
+		<div class="desc">
+			A continuous line that connects back to the start.<br /><br />
+
+			This is nearly the same	as [page:Line]; the only difference is that it is rendered using
+			[link:https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/drawElements gl.LINE_LOOP]
+			instead of [link:https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/drawElements gl.LINE_STRIP],
+			which draws a straight line to the next vertex, and connects the last vertex back to the first.
+		</div>
+
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( [page:Geometry geometry], [page:Material material] )</h3>
+
+		<div>
+		[page:Geometry geometry] — List of vertices representing points on the line loop.<br />
+		[page:Material material] — Material for the line. Default is [page:LineBasicMaterial LineBasicMaterial].
+		</div>
+
+		<div>If no material is supplied, a randomized line material will be created and assigned to the object.</div>
+
+
+		<h2>Properties</h2>
+		<div>See the base [page:Line] class for common properties.</div>
+
+		<h3>[property:Boolean isLineLoop]</h3>
+		<div>
+			Used to check whether this or derived classes are line loops. Default is *true*.<br /><br />
+
+			You should not change this, as it used internally for optimisation.
+		</div>
+
+
+		<h2>Methods</h2>
+		<div>See the base [page:Line] class for common methods.</div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
+	</body>
+</html>

+ 3 - 3
docs/api/objects/Mesh.html

@@ -54,7 +54,7 @@
 		<div>
 			Used to check whether this or derived classes are meshes. Default is *true*.<br /><br />
 
-			You should not change this, as it used internally for optimisation.
+			You should not change this, as it is used internally for optimisation.
 		</div>
 
 		<h3>[property:Geometry geometry]</h3>
@@ -62,7 +62,7 @@
 			An instance of [page:Geometry] or [page:BufferGeometry] (or derived classes),
 			defining the object's structure.<br /><br />
 
-			Its recommended to always use a [page:BufferGeometry] if possible for best performance.
+			It's recommended to always use a [page:BufferGeometry] if possible for best performance.
 		</div>
 
 		<h3>[property:Material material]</h3>
@@ -101,7 +101,7 @@
 
 		<h3>[method:null updateMorphTargets]()</h3>
 		<div>
-		Updates the morphtargets to have no influence on the object. Resets the
+		Updates the morphTargets to have no influence on the object. Resets the
 		[page:Mesh.morphTargetInfluences morphTargetInfluences] and
 		[page:Mesh.morphTargetDictionary morphTargetDictionary] properties.
 		</div>

+ 2 - 24
docs/api/objects/Skeleton.html

@@ -47,12 +47,10 @@ var armSkeleton = new THREE.Skeleton( bones );
 		<h2>Constructor</h2>
 
 
-		<h3>[name]( [page:Array bones], [page:Array boneInverses], [page:Boolean useVertexTexture]  )</h3>
+		<h3>[name]( [page:Array bones], [page:Array boneInverses] )</h3>
 		<div>
 		[page:Array bones] - The array of [page:Bone bones]. Default is an empty array.<br/>
-		[page:Array boneInverses] - (optional) An array of [page:Matrix4 Matrix4s].<br/>
-		[page:Boolean useVertexTexture] - (optional) Whether or not to use a vertex texture in the shader.
-		Default is true.<br /><br />
+		[page:Array boneInverses] - (optional) An array of [page:Matrix4 Matrix4s].<br /><br />
 
 		Creates a new [name].
 		</div>
@@ -82,26 +80,6 @@ var armSkeleton = new THREE.Skeleton( bones );
 		The [page:DataTexture] holding the bone data when using a vertex texture.
 		</div>
 
-		<h3>[property:Integer boneTextureHeight]</h3>
-		<div>
-		The height of the vertex data texture.
-		</div>
-
-		<h3>[property:Integer boneTextureWidth]</h3>
-		<div>
-		The width of the vertex data texture.
-		</div>
-
-		<h3>[property:Boolean useVertexTexture]</h3>
-		<div>
-		Whether or not to use a vertex texture in the shader, set in the constructor.
-		Not all devices	support floating point pixel textures. If this option is set then
-		the bone matrices will be packed into	a texture and sent to the shader. This method
-		allows a much larger set of bones to be used. Otherwise	the vertex shader will use
-		uniforms, which do not allow for as many bones to be used. The exact numbers vary
-		between devices.
-		</div>
-
 
 		<h2>Methods</h2>
 

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

@@ -66,12 +66,11 @@
 		</code>
 
 		<h2>Constructor</h2>
-		<h3>[name]( [page:Geometry geometry], [page:Material material], [page:boolean useVertexTexture] )</h3>
+		<h3>[name]( [page:Geometry geometry], [page:Material material] )</h3>
 		<div>
     [page:Geometry geometry] - an instance of [page:Geometry] or [page:BufferGeometry] (recommended).
 		[page:Geometry.skinIndices skinIndices] and [page:Geometry.skinWeights skinWeights] should be set to true on the geometry.<br />
-    [page:Material material] - (optional) an instance of [page:Material]. Default is a new [page:MeshBasicMaterial] .<br />
-		[page:boolean useVertexTexture] - (optional) defines whether a vertex texture can be used. Default is true.
+    [page:Material material] - (optional) an instance of [page:Material]. Default is a new [page:MeshBasicMaterial].
 		</div>
 
 
@@ -153,7 +152,10 @@
 		Updates the [page:Matrix4 MatrixWorld].
 		</div>
 
-
+		<h3>[method:null initBones]()</h3>
+		<div>
+		Creates an array of hierarchical [page:Bone bones] objects from the internal geometry.
+		</div>
 
 		<h2>Source</h2>
 

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

@@ -305,6 +305,9 @@
 		This method clears a rendertarget. To do this, it activates the rendertarget.
 		</div>
 
+		<h3>[method:null compile]( [page:Scene scene], [page:Camera camera] )</h3>
+		<div>Compiles all materials in the scene with the camera. This is useful to precompile shaders before the first rendering.</div>
+		
 		<h3>[method:null dispose]( )</h3>
 		<div>Dispose of the current rendering context.</div>
 

+ 3 - 3
docs/api/textures/CompressedTexture.html

@@ -25,11 +25,11 @@
 
 		<h3>[name]( [page:Array mipmaps], [page:Number width], [page:Number height], [page:Constant format], [page:Constant type], [page:Constant mapping], [page:Constant wrapS], [page:Constant wrapT], [page:Constant magFilter], [page:Constant minFilter], [page:Number anisotropy] )</h3>
 		<div>
-		[page:Array mipmaps] -- The mipmaps array should contains objects with data, width and height. The mipmaps should be from of the correct format and type. <br />
+		[page:Array mipmaps] -- The mipmaps array should contain objects with data, width and height. The mipmaps should be of the correct format and type.<br />
 
-		[page:Number width] -- The width of the biggest mipmap<br />
+		[page:Number width] -- The width of the biggest mipmap.<br />
 
-		[page:Number height] -- The height of the biggest mipmap <br />
+		[page:Number height] -- The height of the biggest mipmap.<br />
 
 		[page:Constant format] -- The format used in the mipmaps.
 		See [page:Textures ST3C Compressed Texture Formats],

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

@@ -52,6 +52,9 @@
 		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.
@@ -87,6 +90,13 @@
 		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.
@@ -193,6 +203,30 @@
 		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]

+ 6 - 6
docs/examples/collada/Animation.html

@@ -19,7 +19,7 @@
 		<h3>[name]([page:Object3d root], [page:String name])</h3>
 		<div>
 		root -- The mesh to animate. <br />
-		name -- The name of the animation
+		name -- The name of the animation.
 		</div>
 		<div>
 		Creates an animation for root. The animation data is gathered from AnimationHandler based on its name.
@@ -34,7 +34,7 @@
 
 		<h3>[property:Object data]</h3>
 		<div>
-		The data containing the animation
+		The data containing the animation.
 		</div>
 
 		<h3>[property:Array hierarchy]</h3>
@@ -86,7 +86,7 @@
 
 		<h3>[method:Boolean update]([page:Number deltaTimeMS])</h3>
 		<div>
-		deltaTimeMS -- The time of the between the previous frame and this frame in miliseconds.
+		deltaTimeMS -- The time elapsed between the previous frame and this frame in milliseconds.
 		</div>
 		<div>
 		Updates the animation in time. This shouldn't be called by user code. The animationHandler calls this method.
@@ -94,8 +94,8 @@
 
 		<h3>[method:array interpolateCatmullRom]([page:Array points], [page:Number scale])</h3>
 		<div>
-		points -- The 4 control point to calculate CatMullRom <br />
-		scale -- The scale between the previous key and the nex key
+		points -- The 4 control point to calculate CatMullRom. <br />
+		scale -- The scale between the previous key and the next key.
 		</div>
 		<div>
 		Interpolates the point based on the key. Is used in update.
@@ -104,7 +104,7 @@
 		<h3>[method:Object getNextKeyWith]([page:String type], [page:Object h], [page:Number key])</h3>
 		<div>
 		type -- The animationtype for the key. Can be "pos", "rot" and "scl".<br />
-		h -- The object of the hierarchy that catins the key <br />
+		h -- The object of the hierarchy that contains the key. <br />
 		key -- The index of the next possible key.
 		</div>
 		<div>

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

@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../" />
+		<script src="list.js"></script>
+		<script src="page.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 generate a convex hull for a given array of 3D points.
+			The average time complexity for this task is considered to be O(nlog(n)).</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>
+
+		<code>var geometry = new THREE.ConvexBufferGeometry( points );
+		var material = new THREE.MeshBasicMaterial( {color: 0x00ff00} );
+		var mesh = new THREE.Mesh( geometry, material );
+		scene.add( mesh );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( [page:Array points] )</h3>
+		<div>
+		points — Array of [page:Vector3 Vector3s] that the resulting convex hull will contain.
+		</div>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/geometries/ConvexGeometry.js examples/js/geometries/ConvexGeometry.js]
+	</body>
+</html>

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

@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		[page:Geometry] &rarr;
+
+		<h1>[name]</h1>
+
+		<div class="desc">[name] can be used to generate a convex hull for a given array of 3D points.
+			The average time complexity for this task is considered to be O(nlog(n)).</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>
+
+		<code>var geometry = new THREE.ConvexGeometry( points );
+		var material = new THREE.MeshBasicMaterial( {color: 0x00ff00} );
+		var mesh = new THREE.Mesh( geometry, material );
+		scene.add( mesh );
+		</code>
+
+		<h2>Constructor</h2>
+
+		<h3>[name]( [page:Array points] )</h3>
+		<div>
+		points — Array of [page:Vector3 Vector3s] that the resulting convex hull will contain.
+		</div>
+
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/geometries/ConvexGeometry.js examples/js/geometries/ConvexGeometry.js]
+	</body>
+</html>

+ 38 - 23
docs/examples/loaders/GLTFLoader.html → docs/examples/loaders/GLTF2Loader.html

@@ -12,40 +12,55 @@
 		<h1>[name]</h1>
 
 		<div class="desc">
-		A loader for loading a *gltf* resource in JSON format.
+		A loader for *glTF* 2.0 resources.
 		<br /><br />
-		The <a href="https://www.khronos.org/gltf">glTF file format</a> is a JSON file format to enable rapid delivery and loading of 3D content.
+		<a href="https://www.khronos.org/gltf">glTF</a> (GL Transmission Format) is an open format
+		specification 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, shaders, skins, skeletons, animations, lights, and/or cameras. Morph target
+		animations are not yet finalized in the
+		<a href="https://github.com/KhronosGroup/glTF/tree/master/specification">glTF specification</a>.
 		</div>
 
-		<h2>Notes</h2>
+		<h2>Extensions</h2>
 
 		<div>
-		When using custom shaders provided within a glTF file [page:THREE.GLTFLoader.Shaders] should be updated on each render loop. See [example:webgl_loader_gltf] demo source code for example usage.
+		GLTF2Loader supports the following glTF extensions:
 		</div>
 
-		<div>
-		This class is often used with [page:THREE.GLTFLoader.Animations THREE.GLTFLoader.Animations] to animate parsed animations. See [example:webgl_loader_gltf] demo source code for example usage.
-		</div>
+		<ul>
+			<li>
+				<a target="_blank" href="https://github.com/KhronosGroup/glTF/blob/master/extensions/Khronos/KHR_binary_glTF">
+					KHR_binary_glTF
+				</a>
+			</li>
+			<li>
+				<a target="_blank" href="https://github.com/KhronosGroup/glTF/tree/master/extensions/Khronos/KHR_materials_common">
+					KHR_materials_common
+				</a>
+			</li>
+		</ul>
 
 		<h2>Example</h2>
 
 		<code>
-		// instantiate a loader
-		var loader = new THREE.GLTFLoader();
-
-		// load a glTF resource
-		loader.load(
-			// resource URL
-			'models/gltf/duck/duck.json',
-			// Function when resource is loaded
-			function ( object ) {
-				scene.add( object.scene );
-			}
-		);
+		// Instantiate a loader
+		var loader = new THREE.GLTF2Loader();
+
+		// 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>
 
-		[example:webgl_loader_gltf]
-		
+		[example:webgl_loader_gltf2]
+
 		<h2>Constructor</h2>
 
 		<h3>[name]( [page:LoadingManager manager] )</h3>
@@ -92,11 +107,11 @@
 		[page:String path] — The base path from which to find subsequent glTF resources such as textures, GLSL shaders and .bin data files.<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 cameras], .[page:Array animations] and .[page:Array shaders]
+		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].
 		</div>
 
 		<h2>Source</h2>
 
-		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/loaders/GLTFLoader.js examples/js/loaders/GLTFLoader.js]
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/loaders/GLTF2Loader.js examples/js/loaders/GLTF2Loader.js]
 	</body>
 </html>

+ 1 - 1
docs/examples/loaders/OBJLoader.html

@@ -67,7 +67,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 a [page:MultiMaterial] is 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>

+ 89 - 0
docs/examples/quickhull/Face.html

@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<div class="desc">
+			Represents a section bounded by a specific amount of half-edges. The current implmentation assumes that a face always consist of three edges.
+		</div>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]()</h3>
+
+		</div>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Vector3 normal]</h3>
+		<div>
+			The normal vector of the face. Default is a [page:Vector3] at (0, 0, 0).
+		</div>
+
+		<h3>[property:Vector3 midpoint]</h3>
+		<div>
+			The midpoint or centroid of the face. Default is a [page:Vector3] at (0, 0, 0).
+		</div>
+
+		<h3>[property:Float area]</h3>
+		<div>
+			The area of the face. Default is 0.
+		</div>
+
+		<h3>[property:Float constant]</h3>
+		<div>
+			Signed distance from face to the origin. Default is 0.
+		</div>
+
+		<h3>[property:VertexNode outside]</h3>
+		<div>
+			Reference to a vertex in a vertex list this face can see. Default is null.
+		</div>
+
+		<h3>[property:Integer mark]</h3>
+		<div>
+			Marks if a face is visible or deleted. Default is 'Visible'.
+		</div>
+
+		<h3>[property:HalfEdge edge]</h3>
+		<div>
+			Reference to the base edge of a face. To retrieve all edges, you can use the 'next' reference of the current edge. Default is null.
+		</div>
+
+		<h2>Methods</h2>
+
+		<h3>[method:Face create]( [page:VertexNode a], [page:VertexNode b], [page:VertexNode c] )</h3>
+		[page:VertexNode a] - First vertex of the face.<br /><br />
+		[page:VertexNode b] - Second vertex of the face.<br /><br />
+		[page:VertexNode c] - Third vertex of the face.<br /><br />
+
+		<div>Creates a face.</div>
+
+		<h3>[method:HalfEdge getEdge]( [page:Integer i] )</h3>
+		[page:Integer i] - The index of the edge.<br /><br />
+
+		<div>Returns an edge by the given index.</div>
+
+		<h3>[method:Face compute] ()</h3>
+
+		<div>Computes all properties of the face.</div>
+
+		<h3>[method:Float distanceToPoint]( [page:Vector3 point] )</h3>
+		[page:Vector3 point] - Any point in 3D space.<br /><br />
+
+		<div>Returns the signed distance from a given point to the plane representation of this face.</div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/QuickHull.js examples/js/QuickHull.js]
+	</body>
+</html>

+ 79 - 0
docs/examples/quickhull/HalfEdge.html

@@ -0,0 +1,79 @@
+<!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">
+			The basis for a half-edge data structure, also known as doubly connected edge list (DCEL).<br />
+		</div>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [page:VertexNode vertex], [page:Face face] )</h3>
+		[page:VertexNode vertex] - [page:VertexNode] A reference to its destination vertex.<br /><br />
+		[page:Face face] - [page:Face] A reference to its face.<br />
+
+		</div>
+
+		<h2>Properties</h2>
+
+		<h3>[property:VertexNode vertex]</h3>
+		<div>
+			Reference to the destination vertex. The origin vertex can be obtained by querying the destination of its twin, or of the previous half-edge. Default is undefined.
+		</div>
+
+		<h3>[property:HalfEdge prev]</h3>
+		<div>
+			Reference to the previous half-edge of the same face. Default is null.
+		</div>
+
+		<h3>[property:HalfEdge next]</h3>
+		<div>
+			Reference to the next half-edge of the same face. Default is null.
+		</div>
+
+		<h3>[property:HalfEdge twin]</h3>
+		<div>
+			Reference to the twin half-edge to reach the opposite face. Default is null.
+		</div>
+
+		<h3>[property:Face face]</h3>
+		<div>
+			 Each half-edge bounds a single face and thus has a reference to that face. Default is undefined.
+		</div>
+
+		<h2>Methods</h2>
+
+		<h3>[method:VertexNode head]()</h3>
+		<div>Returns the destintation vertex.</div>
+
+		<h3>[method:VertexNode tail]()</h3>
+		<div>Returns the origin vertex.</div>
+
+		<h3>[method:Float length]()</h3>
+		<div>Returns the [link:https://en.wikipedia.org/wiki/Euclidean_distance Euclidean length]
+		(straight-line length) of the edge.</div>
+
+		<h3>[method:Float lengthSquared]()</h3>
+		<div>Returns the square of the [link:https://en.wikipedia.org/wiki/Euclidean_distance Euclidean length]
+		(straight-line length) of the edge.</div>
+
+		<h3>[method:HalfEdge setTwin]( [page:HalfEdge edge] )</h3>
+		[page:HalfEdge edge] - Any half-edge.<br /><br />
+
+		<div>Sets the twin edge of this half-edge. It also ensures that the twin reference of the given half-edge is correctly set.</div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/QuickHull.js examples/js/QuickHull.js]
+	</body>
+</html>

+ 175 - 0
docs/examples/quickhull/QuickHull.html

@@ -0,0 +1,175 @@
+<!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">
+			General information about the Quickhull algorithm: Dirk Gregorius. March 2014, Game Developers Conference: [link:http://media.steampowered.com/apps/valve/2014/DirkGregorius_ImplementingQuickHull.pdf Implementing QuickHull].
+		</div>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]()</h3>
+
+		</div>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Float tolerance]</h3>
+		<div>
+			The epsilon value that is used for internal comparative operations. The calculation of this value depends on the size of the geometry. Default is -1.
+		</div>
+
+		<h3>[property:Array faces]</h3>
+		<div>
+			The generated faces of the convex hull. Default is an empty array.
+		</div>
+
+		<h3>[property:Array newFaces]</h3>
+		<div>
+			This array holds the faces that are generated within a single iteration. Default is an empty array.
+		</div>
+
+		<h3>[property:VertexList assigned]</h3>
+		<div>
+			This [page:VertexList vertex list] holds all vertices that are assigned to a face. Default is an empty vertex list.
+		</div>
+
+		<h3>[property:VertexList unassigned]</h3>
+		<div>
+			This [page:VertexList vertex list] holds all vertices that are not assigned to a face. Default is an empty vertex list.
+		</div>
+
+		<h3>[property:Array vertices]</h3>
+		<div>
+			The internal representation of the given geometry data (an array of [page:VertexNode vertices]).
+		</div>
+
+		<h2>Methods</h2>
+
+		<h3>[method:QuickHull setFromPoints]( [page:Array points] )</h3>
+		[page:Array points] - Array of [page:Vector3 Vector3s] that the resulting convex hull will contain.<br /><br />
+
+		<div>Computes to convex hull for the given array of points.</div>
+
+		<h3>[method:QuickHull setFromObject]( [page:Object3D object] )</h3>
+		[page:Object3D object] - [page:Object3D] to compute the convex hull of.<br /><br />
+
+		<div>Computes the convex hull of an [page:Object3D] (including its children),
+		accounting for the world transforms of both the object and its childrens.</div>
+
+		<h3>[method:QuickHull makeEmpty]()</h3>
+
+		<div>Makes this convex hull empty.</div>
+
+		<h3>[method:QuickHull addVertexToFace]( [page:VertexNode vertex], [page:Face face]	)</h3>
+		[page:VertexNodeNode vertex] - The vetex to add.<br /><br />
+		[page:Face face] - The target face.<br /><br />
+
+		<div>Adds a vertex to the 'assigned' list of vertices and assigns it to the given face.</div>
+
+		<h3>[method:QuickHull removeVertexFromFace]( [page:VertexNode vertex], [page:Face face]	)</h3>
+		[page:VertexNode vertex] - The vetex to remove.<br /><br />
+		[page:Face face] - The target face.<br /><br />
+
+		<div>Removes a vertex from the 'assigned' list of vertices and from the given face. It also makes sure that the link from 'face' to the first vertex it sees in 'assigned' is linked correctly after the removal.</div>
+
+		<h3>[method:VertexNode removeAllVerticesFromFace]( [page:Face face]	)</h3>
+		[page:Face face] - The given face.<br /><br />
+
+		<div>Removes all the visible vertices that a given face is able to see which are stored in the 'assigned' vertext list.</div>
+
+		<h3>[method:QuickHull deleteFaceVertices]( [page:Face face], [page:Face absorbingFace]	)</h3>
+		[page:Face face] - The given face.<br /><br />
+		[page:Face absorbingFace] - An optional face that tries to absorb the vertices of the first face.<br /><br />
+
+		<div>Removes all the visible vertices that 'face' is able to see.
+			<ul>
+				<li>If 'absorbingFace' doesn't exist, then all the removed vertices will be added to the 'unassigned' vertex list.</li>
+				<li>If 'absorbingFace' exists, then this method will assign all the vertices of 'face' that can see 'absorbingFace'.</li>
+				<li>If a vertex cannot see 'absorbingFace', it's added to the 'unassigned' vertex list.</li>
+			</ul>
+		</div>
+
+		<h3>[method:QuickHull resolveUnassignedPoints]( [page:Array newFaces]	)</h3>
+		[page:Face newFaces] - An array of new faces.<br /><br />
+
+		<div>Reassigns as many vertices as possible from the unassigned list to the new faces.</div>
+
+		<h3>[method:Object computeExtremes]()</h3>
+
+		<div>Computes the extremes values (min/max vectors) which will be used to compute the inital hull.</div>
+
+		<h3>[method:QuickHull computeInitialHull]()</h3>
+
+		<div>Computes the initial simplex assigning to its faces all the points that are candidates to form part of the hull.</div>
+
+		<h3>[method:QuickHull reindexFaces]()</h3>
+
+		<div>Removes inactive (e.g. deleted) faces from the internal face list.</div>
+
+		<h3>[method:VertexNode nextVertexToAdd]()</h3>
+
+		<div>Finds the next vertex to create faces with the current hull.
+			<ul>
+				<li>Let the initial face be the first face existing in the 'assigned' vertex list.</li>
+				<li>If a face doesn't exist then return since there're no vertices left.</li>
+				<li>Otherwise for each vertex that face sees find the one furthest away from it.</li>
+			</ul>
+		</div>
+
+		<h3>[method:QuickHull computeHorizon]( [page:Vector3 eyePoint], [page:HalfEdge crossEdge], [page:Face face], [page:Array horizon]	)</h3>
+		[page:Vector3 eyePoint] - The 3D-coordinates of a point.<br /><br />
+		[page:HalfEdge crossEdge] - The edge used to jump to the current face.<br /><br />
+		[page:Face face] - The current face being tested.<br /><br />
+		[page:Array horizon] - The edges that form part of the horizon in CCW order.<br /><br />
+
+		<div>Computes a chain of half edges in CCW order called the 'horizon'. For an edge to be part of the horizon it must join a face that can see 'eyePoint' and a face that cannot see 'eyePoint'.</div>
+
+		<h3>[method:HalfEdge addAdjoiningFace]( [page:VertexNode eyeVertex], [page:HalfEdge horizonEdge] )</h3>
+		[page:VertexNode eyeVertex] - The vertex that is added to the hull.<br /><br />
+		[page:HalfEdge horizonEdge] - A single edge of the horizon.<br /><br />
+
+		<div>Creates a face with the vertices 'eyeVertex.point', 'horizonEdge.tail' and 'horizonEdge.head' in CCW order.
+			All the half edges are created in CCW order thus the face is always pointing outside the hull</div>
+
+		<h3>[method:QuickHull addNewFaces]( [page:VertexNode eyeVertex], [page:HalfEdge horizonEdge] )</h3>
+		[page:VertexNode eyeVertex] - The vertex that is added to the hull.<br /><br />
+		[page:HalfEdge horizon] - An array of half-edges that form the horizon.<br /><br />
+
+		<div>Adds 'horizon.length' faces to the hull, each face will be linked with the horizon opposite face and the face on the left/right.</div>
+
+		<h3>[method:QuickHull addVertexToHull]( [page:VertexNode eyeVertex] )</h3>
+		[page:VertexNode eyeVertex] - The vertex that is added to the hull.<br /><br />
+
+		<div>Adds a vertex to the hull with the following algorithm
+			<ul>
+				<li>Compute the 'horizon' which is a chain of half edges. For an edge to belong to this group it must be the edge connecting a face that can see 'eyeVertex' and a face which cannot see 'eyeVertex'.</li>
+				<li>All the faces that can see 'eyeVertex' have its visible vertices removed from the assigned vertex list.</li>
+				<li>A new set of faces is created with each edge of the 'horizon' and 'eyeVertex'. Each face is connected with the opposite horizon face and the face on the left/right.</li>
+				<li>The vertices removed from all the visible faces are assigned to the new faces if possible.</li>
+			</ul>
+		</div>
+
+		<h3>[method:QuickHull cleanup]()</h3>
+
+		<div>Cleans up internal properties after computing the convex hull.</div>
+
+		<h3>[method:QuickHull compute]()</h3>
+
+		<div>Starts the execution of the quick hull algorithm.</div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/QuickHull.js examples/js/QuickHull.js]
+	</body>
+</html>

+ 89 - 0
docs/examples/quickhull/VertexList.html

@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<base href="../../" />
+		<script src="list.js"></script>
+		<script src="page.js"></script>
+		<link type="text/css" rel="stylesheet" href="page.css" />
+	</head>
+	<body>
+		<h1>[name]</h1>
+
+		<div class="desc">
+			A doubly linked list of vertices.
+		</div>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]()</h3>
+
+		</div>
+
+		<h2>Properties</h2>
+
+		<h3>[property:VertexNode head]</h3>
+		<div>
+			Reference to the first vertex of the linked list. Default is null.
+		</div>
+
+		<h3>[property:VertexNode tail]</h3>
+		<div>
+			Reference to the last vertex of the linked list. Default is null.
+		</div>
+
+		<h2>Methods</h2>
+
+		<h3>[method:VertexNode first]()</h3>
+		<div>Returns the head reference.</div>
+
+		<h3>[method:VertexNode last]()</h3>
+		<div>Returns the tail reference.</div>
+
+		<h3>[method:VertexList clear]()</h3>
+		<div>Clears the linked list.</div>
+
+		<h3>[method:VertexList insertBefore]( [page:Vertex target], [page:Vertex vertex] )</h3>
+		[page:Vertex target] - The target vertex. It's assumed that this vertex belongs to the linked list.<br /><br />
+		[page:Vertex vertex] - The vertex to insert.<br /><br />
+
+		<div>Inserts a vertex <strong>before</strong> a target vertex.</div>
+
+		<h3>[method:VertexList insertAfter]( [page:Vertex target], [page:Vertex vertex] )</h3>
+		[page:Vertex target] - The target vertex. It's assumed that this vertex belongs to the linked list.<br /><br />
+		[page:Vertex vertex] - The vertex to insert.<br /><br />
+
+		<div>Inserts a vertex <strong>after</strong> a target vertex.</div>
+
+		<h3>[method:VertexList append]( [page:Vertex vertex] )</h3>
+		[page:Vertex vertex] - The vertex to append.<br /><br />
+
+		<div>Appends a vertex to the end of the linked list.</div>
+
+		<h3>[method:VertexList appendChain]( [page:Vertex vertex] )</h3>
+		[page:Vertex vertex] - The head vertex of a chain of vertices.<br /><br />
+
+		<div>Appends a chain of vertices where the given vertex is the head.</div>
+
+		<h3>[method:VertexList remove]( [page:Vertex vertex] )</h3>
+		[page:Vertex vertex] - The vertex to remove.<br /><br />
+
+		<div>Removes a vertex from the linked list.</div>
+
+		<h3>[method:VertexList removeSubList]( [page:Vertex a], [page:Vertex b] )</h3>
+		[page:Vertex a] - The head of the sublist.<br /><br />
+		[page:Vertex b] - The tail of the sublist.<br /><br />
+
+		<div>Removes a sublist of vertices from the linked list.</div>
+
+		<h3>[method:Boolean isEmpty]()</h3>
+
+		<div>Returns true if the linked list is empty.</div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/QuickHull.js examples/js/QuickHull.js]
+	</body>
+</html>

+ 52 - 0
docs/examples/quickhull/VertexNode.html

@@ -0,0 +1,52 @@
+<!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 vertex as a double linked list node.
+		</div>
+
+
+		<h2>Constructor</h2>
+
+
+		<h3>[name]( [page:Vector3 point] )</h3>
+		[page:Vector3 point] - [page:Vector3] A point (x, y, z) in 3D space.<br /><br />
+
+		</div>
+
+		<h2>Properties</h2>
+
+		<h3>[property:Vector3 point]</h3>
+		<div>
+			A point (x, y, z) in 3D space. Default is undefined.
+		</div>
+
+		<h3>[property:VertexNode prev]</h3>
+		<div>
+			Reference to the previous vertex in the double linked list. Default is null.
+		</div>
+
+		<h3>[property:VertexNode next]</h3>
+		<div>
+			Reference to the next vertex in the double linked list. Default is null.
+		</div>
+
+		<h3>[property:Face face]</h3>
+		<div>
+			Reference to the face that is able to see this vertex. Default is undefined.
+		</div>
+
+		<h2>Source</h2>
+
+		[link:https://github.com/mrdoob/three.js/blob/master/examples/js/QuickHull.js examples/js/QuickHull.js]
+	</body>
+</html>

+ 205 - 0
docs/index.css

@@ -0,0 +1,205 @@
+@font-face {
+	font-family: 'inconsolata';
+	src: url('files/inconsolata.woff') format('woff');
+	font-weight: normal;
+	font-style: normal;
+}
+
+*{
+	box-sizing: border-box;
+}
+
+html {
+	height: 100%;
+}
+
+body {
+	background-color: #ffffff;
+	margin: 0px;
+	height: 100%;
+	color: #555;
+	font-family: 'inconsolata';
+	font-size: 15px;
+	line-height: 18px;
+	overflow: hidden;
+}
+
+h1 {
+	margin-top: 30px;
+	margin-bottom: 40px;
+	margin-left: 20px;
+	font-size: 25px;
+	font-weight: normal;
+}
+
+h2 {
+	color: #454545;
+	font-size: 18px;
+	font-weight: normal;
+
+	margin-top: 20px;
+	margin-left: 20px;
+}
+
+h3 {
+	color: #666;
+	font-size: 16px;
+	font-weight: normal;
+
+	margin-top: 20px;
+	margin-left: 20px;
+}
+
+a {
+	color: #2194CE;
+	text-decoration: none;
+}
+
+#panel {
+	position: fixed;
+	left: 0px;
+	width: 260px;
+	height: 100%;
+	overflow: auto;
+	background: #fafafa;
+}
+
+#panel ul {
+	list-style-type: none;
+	padding: 0px;
+	margin-left: 20px;
+}
+
+iframe {
+	position: absolute;
+	border: 0px;
+	left: 260px;
+	width: calc(100% - 260px);
+	height: 100%;
+	overflow: auto;
+}
+
+.filterBlock{
+	margin: 20px;
+	position: relative;
+}
+
+.filterBlock p {
+	margin: 0;
+}
+
+#filterInput {
+	width: 100%;
+	padding: 5px;
+	font-family: inherit;
+	font-size: 15px;
+	outline: none;
+	border: 1px solid #dedede;
+}
+
+#filterInput:focus{
+	border: 1px solid #2194CE;
+}
+
+#clearFilterButton {
+	position: absolute;
+	right: 6px;
+	top: 50%;
+	margin-top: -8px;
+	width: 16px;
+	height: 16px;
+	font-size: 14px;
+	color: grey;
+	text-align: center;
+	line-height: 0;
+	padding-top: 7px;
+	opacity: .5;
+}
+
+#clearFilterButton:hover {
+	opacity: 1;
+}
+
+.hidden {
+	display: none;
+}
+
+#panel li b {
+	font-weight: bold;
+}
+
+/* mobile */
+
+#expandButton {
+	display: none;
+	position: absolute;
+	right: 20px;
+	top: 12px;
+	width: 32px;
+	height: 32px;
+}
+
+#expandButton span {
+	height: 2px;
+	background-color: #2194CE;
+	width: 16px;
+	position: absolute;
+	left: 8px;
+	top: 10px;
+}
+
+#expandButton span:nth-child(1) {
+	top: 16px;
+}
+
+#expandButton span:nth-child(2) {
+	top: 22px;
+}
+
+@media all and ( max-width: 640px ) {
+
+	h1{
+		margin-top: 20px;
+		margin-bottom: 20px;
+	}
+
+	#panel{
+		position: absolute;
+		left: 0;
+		top: 0;
+		height: 480px;
+		width: 100%;
+		right: 0;
+		z-index: 100;
+		overflow: hidden;
+		border-bottom: 1px solid #dedede;
+	}
+
+	#navigation{
+		position: absolute;
+		left: 0;
+		top: 90px;
+		right: 0;
+		bottom: 0;
+		font-size: 17px;
+		line-height: 22px;
+		overflow: auto;
+	}
+
+	iframe{
+		position: absolute;
+		left: 0;
+		top: 56px;
+		width: 100%;
+		height: calc(100% - 56px);
+	}
+
+	#expandButton{
+		display: block;
+	}
+
+	#panel.collapsed{
+		height: 56px;
+	}
+
+}

+ 337 - 336
docs/index.html

@@ -4,206 +4,7 @@
 		<meta charset="utf-8">
 		<title>three.js / documentation</title>
 		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
-		<style>
-
-			@font-face {
-				font-family: 'inconsolata';
-				src: url('files/inconsolata.woff') format('woff');
-				font-weight: normal;
-				font-style: normal;
-			}
-
-			*{
-				box-sizing: border-box;
-			}
-
-			html {
-				height: 100%;
-			}
-
-			body {
-				background-color: #ffffff;
-				margin: 0px;
-				height: 100%;
-				color: #555;
-				font-family: 'inconsolata';
-				font-size: 15px;
-				line-height: 18px;
-				overflow: hidden;
-			}
-
-				h1 {
-					margin-top: 30px;
-					margin-bottom: 40px;
-					margin-left: 20px;
-					font-size: 25px;
-					font-weight: normal;
-				}
-
-				h2 {
-					color: #454545;
-					font-size: 18px;
-					font-weight: normal;
-
-					margin-top: 20px;
-					margin-left: 20px;
-				}
-
-				h3 {
-					color: #666;
-					font-size: 16px;
-					font-weight: normal;
-
-					margin-top: 20px;
-					margin-left: 20px;
-				}
-
-			a {
-				color: #2194CE;
-				text-decoration: none;
-			}
-
-			#panel {
-				position: fixed;
-				left: 0px;
-				width: 260px;
-				height: 100%;
-				overflow: auto;
-				background: #fafafa;
-			}
-
-				#panel ul {
-					list-style-type: none;
-					padding: 0px;
-					margin-left: 20px;
-				}
-
-			#viewer {
-				position: absolute;
-				border: 0px;
-				left: 260px;
-				width: calc(100% - 260px);
-				height: 100%;
-				overflow: auto;
-			}
-
-			.filterBlock{
-				margin: 20px;
-				position: relative;
-			}
-			.filterBlock p {
-				margin: 0;
-			}
-
-			#filterInput {
-				width: 100%;
-				padding: 5px;
-				font-family: inherit;
-				font-size: 15px;
-				outline: none;
-				border: 1px solid #dedede;
-			}
-
-			#filterInput:focus{
-				border: 1px solid #2194CE;
-			}
-
-			#clearFilterButton {
-				position: absolute;
-				right: 6px;
-				top: 50%;
-				margin-top: -8px;
-				width: 16px;
-				height: 16px;
-				font-size: 14px;
-				color: grey;
-				text-align: center;
-				line-height: 0;
-				padding-top: 7px;
-				opacity: .5;
-			}
-
-			#clearFilterButton:hover {
-				opacity: 1;
-			}
-
-			.filtered {
-				display: none;
-			}
-
-			#panel li b {
-				font-weight: bold;
-			}
-
-			/* mobile */
-
-			#expandButton {
-				display: none;
-				position: absolute;
-				right: 20px;
-				top: 12px;
-				width: 32px;
-				height: 32px;
-			}
-
-				#expandButton span {
-					height: 2px;
-					background-color: #2194CE;
-					width: 16px;
-					position: absolute;
-					left: 8px;
-					top: 10px;
-				}
-
-				#expandButton span:nth-child(1) {
-					top: 16px;
-				}
-
-				#expandButton span:nth-child(2) {
-					top: 22px;
-				}
-
-			@media all and ( max-width: 640px ) {
-				h1{
-					margin-top: 20px;
-					margin-bottom: 20px;
-				}
-				#panel{
-					position: absolute;
-					left: 0;
-					top: 0;
-					height: 480px;
-					width: 100%;
-					right: 0;
-					z-index: 100;
-					overflow: hidden;
-					border-bottom: 1px solid #dedede;
-				}
-				#content{
-					position: absolute;
-					left: 0;
-					top: 90px;
-					right: 0;
-					bottom: 0;
-					font-size: 17px;
-					line-height: 22px;
-					overflow: auto;
-				}
-				#viewer{
-					position: absolute;
-					left: 0;
-					top: 56px;
-					width: 100%;
-					height: calc(100% - 56px);
-				}
-				#expandButton{
-					display: block;
-				}
-				#panel.collapsed{
-					height: 56px;
-				}
-			}
-		</style>
+		<link type="text/css" rel="stylesheet" href="index.css">
 	</head>
 	<body>
 		<script type="text/javascript">
@@ -221,220 +22,419 @@
 		</script>
 
 		<div id="panel" class="collapsed">
+
 			<h1><a href="http://threejs.org">three.js</a> / docs</h1>
+
 			<a id="expandButton" href="#">
 				<span></span>
 				<span></span>
 				<span></span>
 			</a>
+
 			<div class="filterBlock" >
-				<input type="text" id="filterInput" placeholder="Type to filter"/>
-				<a href="#" id="clearFilterButton" >x</a>
+				<input type="text" id="filterInput" placeholder="Type to filter">
+				<a href="#" id="clearFilterButton">x</a>
 			</div>
-			<div id="content"></div>
+
 		</div>
-		<iframe id="viewer"></iframe>
+
+		<iframe></iframe>
 
 		<script src="list.js"></script>
-		<script>
 
-			function extractQuery() {
-				var p = window.location.search.indexOf( '?q=' );
-				if( p !== -1 ) {
-					return window.location.search.substr( 3 );
-				} 
-				return ''
-			}
+		<script>
 
 			var panel = document.getElementById( 'panel' );
-			var viewer = document.getElementById( 'viewer' );
-
+			var clearFilterButton = document.getElementById( 'clearFilterButton' );
 			var expandButton = document.getElementById( 'expandButton' );
-			expandButton.addEventListener( 'click', function ( event ) {
+			var filterInput = document.getElementById( 'filterInput' );
+			var iframe = document.querySelector( 'iframe' );
+
+			var pageProperties = {};
+			var titles = {};
+			var categoryElements = [];
+
+
+// ----------------------------------------------------------------------------
+// Initialization
+// ----------------------------------------------------------------------------
+
+
+			// Functionality for hamburger button (on small devices)
+
+			expandButton.onclick = function ( event ) {
+
+				event.preventDefault();
 				panel.classList.toggle( 'collapsed' );
+
+			};
+
+
+			// Functionality for search/filter input field
+
+			filterInput.oninput = function ( event ) {
+
+				updateFilter();
+
+			};
+
+
+			// Functionality for filter clear button
+
+			clearFilterButton.onclick = function ( event ) {
+
 				event.preventDefault();
-			} );
 
-			var filterInput = document.getElementById( 'filterInput' );
-			var clearFilterButton = document.getElementById( 'clearFilterButton' );
+				filterInput.value = '';
+				updateFilter();
+
+			};
+
+
+			// Activate content and title change on browser navigation
+
+			window.onpopstate = createNewIframe;
+
+
+			// Create the navigation panel and configure the iframe
+
+			createNavigation();
+			createNewIframe();
+
+
+// ----------------------------------------------------------------------------
+// Navigation Panel
+// ----------------------------------------------------------------------------
+
+
+			function createNavigation () {
+
+				// Create the navigation panel using data from list.js
+
+				var navigation = createAndAppendDOMElement( { type: 'div', parent: panel } );
+
+				for ( var section in list ) {
+
+					// Create sections
+
+					var categories = list[ section ];
+
+					var sectionHead = createAndAppendDOMElement( { type: 'h2', parent: navigation, content: section } )
 
-			var DELIMITER = '/';
-			var MEMBER_DELIMITER = '.';
-			var nameCategoryMap = {};
-			var sections = [];
-			var selected = null;
+					for ( var category in categories ) {
 
-			var content = document.getElementById( 'content' );
+						// Create categories
 
-			for ( var section in list ) {
+						var pages = categories[ category ];
 
-				var h2 = document.createElement( 'h2' );
-				h2.textContent = section;
+						var categoryContainer = createAndAppendDOMElement( { type: 'div', parent: navigation } );
+						var categoryHead = createAndAppendDOMElement( { type: 'h3', parent: categoryContainer, content: category } );
+						var categoryContent = createAndAppendDOMElement( { type: 'ul', parent: categoryContainer } );
 
-				content.appendChild( h2 );
+						for ( var pageName in pages ) {
 
-				for ( var category in list[ section ] ) {
+							// Create page links
 
-					var div = document.createElement( 'div' );
+							var pageURL = pages[ pageName ];
 
-					var h3 = document.createElement( 'h3' );
-					h3.textContent = category;
+							var listElement = createAndAppendDOMElement( { type: 'li', parent: categoryContent } );
+							var linkElement = createAndAppendDOMElement( { type: 'a', parent: listElement, content: pageName } );
 
-					div.appendChild( h3 );
+							// The href attribute is only used for the option to create a new tab by right click
 
-					var ul = document.createElement( 'ul' );
-					div.appendChild( ul );
+							linkElement.setAttribute( 'href', '#' + pageURL );
 
-					for ( var i = 0; i < list[ section ][ category ].length; i ++ ) {
+							addClickHandlers( linkElement, pageURL );
 
-						var page = list[ section ][ category ][ i ];
+							// Gather the main properties for the current subpage
 
-						var li = document.createElement( 'li' );
-						var a = document.createElement( 'a' );
-						a.setAttribute( 'href', '#' );
-						( function( s, c, p ) {
-							a.addEventListener( 'click', function( e ) {
-								goTo( s, c, p );
-								e.preventDefault();
-							} )
-						} )( section, category, page[ 0 ] );
-						a.textContent = page[ 0 ];
-						li.appendChild( a );
-						ul.appendChild( li );
+							pageProperties[ pageName ] = {
+								section: section,
+								category: category,
+								pageURL: pageURL,
+								linkElement: linkElement
+							};
 
-						nameCategoryMap[page[0]] = {
-							section: section,
-							category: category,
-							name: page[0],
-							element: a
-						};
+						// Gather the document titles (used for easy access on browser navigation)
+
+						titles[ pageURL ] = pageName;
+
+						}
+
+						// Gather the category elements for easy access on filtering
+
+						categoryElements.push( categoryContent );
 
 					}
 
-					content.appendChild( div );
-					sections.push( ul );
+				}
+
+			};
+
+
+			function createAndAppendDOMElement( properties ) {
+
+				// Helper function for creating and appending new DOM elements
+
+				var newElement = document.createElement( properties.type );
+
+				properties.parent.appendChild( newElement );
+
+				if ( properties.content ) {
+
+					newElement.textContent = properties.content;
 
 				}
 
+				return newElement;
 
 			}
 
-			panel.appendChild( content );
 
-			function layoutList() {
+			function addClickHandlers ( linkElement, pageURL ) {
+
+				// Helper function for adding ClickHandlers to the page links
+
+				linkElement.onclick = function ( event ) {
+
+					event.preventDefault();
+
+					window.location.hash = pageURL;
+					createNewIframe();
+
+					panel.classList.add( 'collapsed' );
+
+				};
+
+			};
+
+
+// ----------------------------------------------------------------------------
+// Query Strings (optional)
+// ----------------------------------------------------------------------------
+
+
+//			(uncomment the following lines and the first line in updateFilter(), if you want query strings):
+
+//			filterInput.value = extractFromQueryString();
+//			updateFilter();
+//
+//
+//			function extractFromQueryString() {
+//
+//				var queryString = window.location.search;
+//
+//				if ( queryString.indexOf( '?q=' ) === -1 ) return '';
+//
+//				return queryString.substr( 3 );
+//
+//			}
+//
+//			function updateQueryString() {
+//
+//				var searchString = filterInput.value;
+//				var query = '';
+//
+//				if (searchString !== '') {
+//
+//					query = '?q=' + searchString;
+//
+//				}
+//
+//				window.history.replaceState( {} , '', window.location.pathname + query + window.location.hash );
+//
+//			}
+
+
+// ----------------------------------------------------------------------------
+// Filtering
+// ----------------------------------------------------------------------------
+
+
+			function updateFilter() {
+
+//			(uncomment the following line and the "Query strings" section, if you want query strings):
+//			updateQueryString();
+
+				var regExp = new RegExp( filterInput.value, 'gi' );
+
+				for ( var pageName in pageProperties ) {
+
+					var linkElement = pageProperties[ pageName ].linkElement;
+					var categoryClassList = linkElement.parentElement.classList;
+					var filterResults = pageName.match( regExp );
+
+					if ( filterResults && filterResults.length > 0 ) {
+
+						// Accentuate matching characters
+
+						for ( var i = 0; i < filterResults.length; i++ ) {
+
+							var result = filterResults[ i ];
+
+							if ( result !== '' ) {
+								pageName = pageName.replace( result, '<b>' + result + '</b>' );
+							}
 
-				sections.forEach( function( el ) {
-					var collapsed = true;
-					Array.prototype.slice.apply( el.children ).forEach( function( item ) {
-						if( !item.classList.contains( 'filtered' ) ) {
-							collapsed = false;
 						}
-					} );
-					if( collapsed ) {
-						el.parentElement.classList.add( 'filtered' );
+
+						categoryClassList.remove( 'hidden' );
+						linkElement.innerHTML = pageName;
+
 					} else {
-						el.parentElement.classList.remove( 'filtered' );
+
+						// Hide all non-matching page names
+
+						categoryClassList.add( 'hidden' );
+
 					}
-				} );
+
+				}
+
+				displayFilteredPanel();
+
 			}
 
-			filterInput.addEventListener( 'input', function( e ) {
-				updateFilter();
-			} );
 
-			clearFilterButton.addEventListener( 'click', function( e ) {
-				filterInput.value = '';
-				updateFilter();
-				e.preventDefault();
-			} );
+			function displayFilteredPanel() {
 
-			function updateFilter() {
+				// Show/hide categories depending on their content
+				// First check if at least one page in this category is not hidden
+
+				categoryElements.forEach( function ( category ) {
+
+					var pages = category.children;
+					var pagesLength = pages.length;
+					var sectionClassList = category.parentElement.classList;
+
+					var hideCategory = true;
+
+					for ( var i = 0; i < pagesLength; i ++ ) {
+
+						var pageClassList = pages[ i ].classList;
+
+						if ( ! pageClassList.contains( 'hidden' ) ) {
+
+							hideCategory = false;
 
-				var v = filterInput.value;
-				if( v !== '' ) {
-					window.history.replaceState( {} , '', '?q=' + v );
-				} else {
-					window.history.replaceState( {} , '', window.location.pathname );
-				}
-				if( selected ) window.location.hash = selected;
-
-				var exp = new RegExp( filterInput.value, 'gi' );
-				for( var j in nameCategoryMap ) {
-					var res = nameCategoryMap[ j ].name.match( exp );
-					if( res && res.length > 0 ) {
-						nameCategoryMap[ j ].element.parentElement.classList.remove( 'filtered' );
-						var str = nameCategoryMap[ j ].name;
-						for( var i = 0; i < res.length; i++ ) {
-							str = str.replace( res[ i ], '<b>' + res[ i ] + '</b>' );
 						}
-						nameCategoryMap[ j ].element.innerHTML = str;
+
+					}
+
+					// If and only if all page names are hidden, hide the whole category
+
+					if ( hideCategory ) {
+
+						sectionClassList.add( 'hidden' );
+
 					} else {
-						nameCategoryMap[ j ].element.parentElement.classList.add( 'filtered' );
-						nameCategoryMap[ j ].element.textContent = nameCategoryMap[ j ].name;
+
+						sectionClassList.remove( 'hidden' );
+
 					}
-				}
-				layoutList();
+
+				} );
 
 			}
 
-			function encodeUrl( path ) {
 
-				return path.replace(/\ \/\ /g, '.').replace(/\ /g, '_');
+// ----------------------------------------------------------------------------
+// Routing
+// ----------------------------------------------------------------------------
 
-			}
 
-			function decodeUrl( path ) {
+			function setUrlFragment( pageName ) {
 
-				return path.replace(/_/g, ' ').replace(/\./g, ' / ');
+				// Handle navigation from the subpages (iframes):
+				// First separate the memeber (if existing) from the page name,
+				// then identify the subpage's URL and set it as URL fragment (re-adding the member)
 
-			}
+				var splitPageName = decomposePageName( pageName, '.', '.' );
 
-			// Page loading
+				var currentProperties = pageProperties[ splitPageName[ 0 ] ];
 
-			function goTo( section, category, name, member ) {
-				var parts, location;
+				if ( currentProperties ) {
 
-				// Fully resolve links that only provide a name
-				if(arguments.length == 1) {
+					window.location.hash = currentProperties.pageURL + splitPageName[ 1 ];
 
-					// Resolve links of the form 'Class.member'
-					if(section.indexOf(MEMBER_DELIMITER) !== -1) {
-						parts = section.split(MEMBER_DELIMITER);
-						section = parts[0];
-						member = parts[1];
-					}
+					createNewIframe();
 
-					location = nameCategoryMap[section];
-					if (!location) return;
-					section = location.section;
-					category = location.category;
-					name = location.name;
 				}
 
-				var title = 'three.js - documentation - ' + section + ' - ' + name;
-				var url = encodeUrl(section) + DELIMITER + encodeUrl( category ) + DELIMITER + encodeUrl(name) + (!!member ? MEMBER_DELIMITER + encodeUrl(member) : '');
-				selected = url;
+			}
+
+
+			function createNewIframe() {
 
-				window.location.hash = url;
-				window.document.title = title;
+				// Change the content displayed in the iframe
+				// First separate the member part of the fragment (if existing)
 
-				viewer.src = pages[ section ][ category ][ name ] + '.html' + (!!member ? '#'+member : '');
+				var hash = window.location.hash.substring( 1 );
+				var splitHash = decomposePageName( hash, '.', '#' );
 
-				panel.classList.add( 'collapsed' );
+				// Creating a new Iframe instead of assigning a new src is
+				// a cross-browser solution to allow normal browser navigation;
+				// - only assigning a new src would result in two history states each time.
+
+				// Note: iframe.contentWindow.location.replace(hash) should work, too,
+				// but it doesn't work in Edge with links from the subpages!
+
+				var oldIframe;
+				var subtitle;
+
+				oldIframe = iframe;
+				iframe = oldIframe.cloneNode();
+
+				if(hash) {
+
+					iframe.src = splitHash[ 0 ] + '.html' + splitHash[ 1 ];
+					subtitle = ' - ' + titles[ splitHash[ 0 ] ] + splitHash[ 1 ];
+
+				} else {
+
+					iframe.src = '';
+					subtitle = '';
+
+				}
+
+				document.body.replaceChild( iframe, oldIframe );
+				document.title = 'three.js docs' + subtitle;
 
 			}
 
-			function goToHash() {
 
-				var hash = window.location.hash.substring( 1 ).split(DELIMITER);
-				var member = hash[2].split(MEMBER_DELIMITER);
-				goTo( decodeUrl(hash[0]), decodeUrl(hash[1]), decodeUrl(member[0]), decodeUrl(member.length > 1 ? member[1] : '') );
+			function decomposePageName ( pageName, oldDelimiter, newDelimiter ) {
+
+				// Helper function for separating the member (if existing) from the pageName
+				// For example: 'Geometry.morphTarget' can be converted to
+				// ['Geometry', '.morphTarget'] or ['Geometry', '#morphTarget']
+				// Note: According RFC 3986 no '#' allowed inside of an URL fragment!
+
+				var parts = [];
+
+				var dotIndex = pageName.indexOf( oldDelimiter );
+
+				if ( dotIndex !== -1 ) {
+
+					parts = pageName.split( oldDelimiter );
+					parts[ 1 ] = newDelimiter + parts[ 1 ];
+
+				} else {
+
+					parts[ 0 ] = pageName;
+					parts[ 1 ] = '';
+
+				}
+
+				return parts;
 
 			}
 
-			window.addEventListener( 'hashchange', goToHash, false );
 
-			if ( window.location.hash.length > 0 ) goToHash();
+// ----------------------------------------------------------------------------
+// ASCII Art ;-)
+// ----------------------------------------------------------------------------
+
 
 			console.log([
 				'    __     __',
@@ -447,10 +447,11 @@
 				'                                         \\/____/\\/_____/'
 			].join('\n'));
 
-			filterInput.value = extractQuery();
-			updateFilter( )
 
 		</script>
+
 		<script src="../build/three.min.js"></script> <!-- console sandbox -->
+
 	</body>
+
 </html>

+ 373 - 376
docs/list.js

@@ -1,398 +1,395 @@
 var list = {
 
 	"Manual": {
-		"Getting Started": [
-			[ "Creating a scene", "manual/introduction/Creating-a-scene" ],
-			[ "Detecting WebGL and browser compatibility", "manual/introduction/Detecting-WebGL-and-browser-compatibility" ],
-			[ "How to run things locally", "manual/introduction/How-to-run-thing-locally" ],
-			[ "Drawing Lines", "manual/introduction/Drawing-lines" ],
-			[ "Creating Text", "manual/introduction/Creating-text" ],
-			[ "Migration Guide", "manual/introduction/Migration-guide" ],
-			[ "Code Style Guide", "manual/introduction/Code-style-guide" ],
-			[ "FAQ", "manual/introduction/FAQ" ],
-			[ "Useful links", "manual/introduction/Useful-links" ]
-		],
-
-		"Next Steps": [
-				[ "How to update things", "manual/introduction/How-to-update-things" ],
-			[ "Matrix transformations", "manual/introduction/Matrix-transformations" ]
-		],
-
-		"Build Tools": [
-			[ "Testing with NPM", "manual/buildTools/Testing-with-NPM" ]
-		]
+
+		"Getting Started": {
+			"Creating a scene": "manual/introduction/Creating-a-scene",
+			"WebGL compatibility check": "manual/introduction/WebGL-compatibility-check",
+			"How to run things locally": "manual/introduction/How-to-run-thing-locally",
+			"Drawing Lines": "manual/introduction/Drawing-lines",
+			"Creating Text": "manual/introduction/Creating-text",
+			"Migration Guide": "manual/introduction/Migration-guide",
+			"Code Style Guide": "manual/introduction/Code-style-guide",
+			"FAQ": "manual/introduction/FAQ",
+			"Useful links": "manual/introduction/Useful-links"
+		},
+
+		"Next Steps": {
+			"How to update things": "manual/introduction/How-to-update-things",
+			"Matrix transformations": "manual/introduction/Matrix-transformations",
+			"Animation System": "manual/introduction/Animation-system"
+		},
+
+		"Build Tools": {
+			"Testing with NPM": "manual/buildTools/Testing-with-NPM"
+		}
+
 	},
 
 	"Reference": {
 
-		"Animation": [
-			[ "AnimationAction", "api/animation/AnimationAction" ],
-			[ "AnimationClip", "api/animation/AnimationClip" ],
-			[ "AnimationMixer", "api/animation/AnimationMixer" ],
-			[ "AnimationObjectGroup", "api/animation/AnimationObjectGroup" ],
-			[ "AnimationUtils", "api/animation/AnimationUtils" ],
-			[ "KeyframeTrack", "api/animation/KeyframeTrack" ],
-			[ "PropertyBinding", "api/animation/PropertyBinding" ],
-			[ "PropertyMixer", "api/animation/PropertyMixer" ]
-		],
-
-		"Animation / Tracks": [
-		  [ "BooleanKeyframeTrack", "api/animation/tracks/BooleanKeyframeTrack" ],
-		  [ "ColorKeyframeTrack", "api/animation/tracks/ColorKeyframeTrack" ],
-		  [ "NumberKeyframeTrack", "api/animation/tracks/NumberKeyframeTrack" ],
-		  [ "QuaternionKeyframeTrack", "api/animation/tracks/QuaternionKeyframeTrack" ],
-		  [ "StringKeyframeTrack", "api/animation/tracks/StringKeyframeTrack" ],
-		  [ "VectorKeyframeTrack", "api/animation/tracks/VectorKeyframeTrack" ]
-		],
-
-		"Audio": [
-			[ "Audio", "api/audio/Audio" ],
-			[ "AudioAnalyser", "api/audio/AudioAnalyser" ],
-			[ "AudioContext", "api/audio/AudioContext" ],
-			[ "AudioListener", "api/audio/AudioListener" ],
-			[ "PositionalAudio", "api/audio/PositionalAudio" ]
-		],
-
-		"Cameras": [
-			[ "Camera", "api/cameras/Camera" ],
-			[ "CubeCamera", "api/cameras/CubeCamera" ],
-			[ "OrthographicCamera", "api/cameras/OrthographicCamera" ],
-			[ "PerspectiveCamera", "api/cameras/PerspectiveCamera" ],
-			[ "StereoCamera", "api/cameras/StereoCamera" ]
-		],
-
-		"Constants": [
-			[ "Animation", "api/constants/Animation" ],
-			[ "Core", "api/constants/Core" ],
-			[ "CustomBlendingEquation", "api/constants/CustomBlendingEquations" ],
-			[ "DrawModes", "api/constants/DrawModes" ],
-			[ "Materials", "api/constants/Materials" ],
-			[ "Renderer", "api/constants/Renderer" ],
-			[ "Textures", "api/constants/Textures" ]
-		],
-
-		"Core": [
-			[ "BufferAttribute", "api/core/BufferAttribute" ],
-			[ "BufferGeometry", "api/core/BufferGeometry" ],
-			[ "Clock", "api/core/Clock" ],
-			[ "DirectGeometry", "api/core/DirectGeometry" ],
-			[ "EventDispatcher", "api/core/EventDispatcher" ],
-			[ "Face3", "api/core/Face3" ],
-			[ "Geometry", "api/core/Geometry" ],
-			[ "InstancedBufferAttribute", "api/core/InstancedBufferAttribute" ],
-			[ "InstancedBufferGeometry", "api/core/InstancedBufferGeometry" ],
-			[ "InstancedInterleavedBuffer", "api/core/InstancedInterleavedBuffer" ],
-			[ "InterleavedBuffer", "api/core/InterleavedBuffer" ],
-			[ "InterleavedBufferAttribute", "api/core/InterleavedBufferAttribute" ],
-			[ "Layers", "api/core/Layers" ],
-			[ "Object3D", "api/core/Object3D" ],
-			[ "Raycaster", "api/core/Raycaster" ],
-			[ "Uniform", "api/core/Uniform" ]
-		],
-
-		"Core / BufferAttributes": [
-			[ "BufferAttribute Types", "api/core/bufferAttributeTypes/BufferAttributeTypes" ]
-		],
-
-		"Deprecated": [
-			[ "DeprecatedList", "api/deprecated/DeprecatedList" ]
-		],
-
-		"Extras": [
-			[ "CurveUtils", "api/extras/CurveUtils" ],
-			[ "SceneUtils", "api/extras/SceneUtils" ],
-			[ "ShapeUtils", "api/extras/ShapeUtils" ]
-		],
-
-		"Extras / Core": [
-			[ "Curve", "api/extras/core/Curve" ],
-			[ "CurvePath", "api/extras/core/CurvePath" ],
-			[ "Font", "api/extras/core/Font" ],
-			[ "Path", "api/extras/core/Path" ],
-			[ "Shape", "api/extras/core/Shape" ],
-			[ "ShapePath", "api/extras/core/ShapePath" ]
-		],
-
-		"Extras / Curves": [
-			[ "ArcCurve", "api/extras/curves/ArcCurve" ],
-			[ "CatmullRomCurve3", "api/extras/curves/CatmullRomCurve3" ],
-			[ "CubicBezierCurve", "api/extras/curves/CubicBezierCurve" ],
-			[ "CubicBezierCurve3", "api/extras/curves/CubicBezierCurve3" ],
-			[ "EllipseCurve", "api/extras/curves/EllipseCurve" ],
-			[ "LineCurve", "api/extras/curves/LineCurve" ],
-			[ "LineCurve3", "api/extras/curves/LineCurve3" ],
-			[ "QuadraticBezierCurve", "api/extras/curves/QuadraticBezierCurve" ],
-			[ "QuadraticBezierCurve3", "api/extras/curves/QuadraticBezierCurve3" ],
-			[ "SplineCurve", "api/extras/curves/SplineCurve" ]
-		],
-
-		"Extras / Objects": [
-			[ "ImmediateRenderObject", "api/extras/objects/ImmediateRenderObject" ],
-			[ "MorphBlendMesh", "api/extras/objects/MorphBlendMesh" ]
-		],
-
-		"Geometries": [
-			[ "BoxBufferGeometry", "api/geometries/BoxBufferGeometry" ],
-			[ "BoxGeometry", "api/geometries/BoxGeometry" ],
-			[ "CircleBufferGeometry", "api/geometries/CircleBufferGeometry" ],
-			[ "CircleGeometry", "api/geometries/CircleGeometry" ],
-			[ "ConeBufferGeometry", "api/geometries/ConeBufferGeometry" ],
-			[ "ConeGeometry", "api/geometries/ConeGeometry" ],
-			[ "CylinderBufferGeometry", "api/geometries/CylinderBufferGeometry" ],
-			[ "CylinderGeometry", "api/geometries/CylinderGeometry" ],
-			[ "DodecahedronBufferGeometry", "api/geometries/DodecahedronBufferGeometry" ],
-			[ "DodecahedronGeometry", "api/geometries/DodecahedronGeometry" ],
-			[ "EdgesGeometry", "api/geometries/EdgesGeometry" ],
-			[ "ExtrudeGeometry", "api/geometries/ExtrudeGeometry" ],
-			[ "IcosahedronBufferGeometry", "api/geometries/IcosahedronBufferGeometry" ],
-			[ "IcosahedronGeometry", "api/geometries/IcosahedronGeometry" ],
-			[ "LatheBufferGeometry", "api/geometries/LatheBufferGeometry" ],
-			[ "LatheGeometry", "api/geometries/LatheGeometry" ],
-			[ "OctahedronBufferGeometry", "api/geometries/OctahedronBufferGeometry" ],
-			[ "OctahedronGeometry", "api/geometries/OctahedronGeometry" ],
-			[ "ParametricBufferGeometry", "api/geometries/ParametricBufferGeometry" ],
-			[ "ParametricGeometry", "api/geometries/ParametricGeometry" ],
-			[ "PlaneBufferGeometry", "api/geometries/PlaneBufferGeometry" ],
-			[ "PlaneGeometry", "api/geometries/PlaneGeometry" ],
-			[ "PolyhedronBufferGeometry", "api/geometries/PolyhedronBufferGeometry" ],
-			[ "PolyhedronGeometry", "api/geometries/PolyhedronGeometry" ],
-			[ "RingBufferGeometry", "api/geometries/RingBufferGeometry" ],
-			[ "RingGeometry", "api/geometries/RingGeometry" ],
-			[ "ShapeBufferGeometry", "api/geometries/ShapeBufferGeometry" ],
-			[ "ShapeGeometry", "api/geometries/ShapeGeometry" ],
-			[ "SphereBufferGeometry", "api/geometries/SphereBufferGeometry" ],
-			[ "SphereGeometry", "api/geometries/SphereGeometry" ],
-			[ "TetrahedronBufferGeometry", "api/geometries/TetrahedronBufferGeometry" ],
-			[ "TetrahedronGeometry", "api/geometries/TetrahedronGeometry" ],
-			[ "TextGeometry", "api/geometries/TextGeometry" ],
-			[ "TorusBufferGeometry", "api/geometries/TorusBufferGeometry" ],
-			[ "TorusGeometry", "api/geometries/TorusGeometry" ],
-			[ "TorusKnotBufferGeometry", "api/geometries/TorusKnotBufferGeometry" ],
-			[ "TorusKnotGeometry", "api/geometries/TorusKnotGeometry" ],
-			[ "TubeGeometry", "api/geometries/TubeGeometry" ],
-			[ "TubeBufferGeometry", "api/geometries/TubeBufferGeometry" ],
-			[ "WireframeGeometry", "api/geometries/WireframeGeometry" ]
-		],
-
-		"Helpers": [
-			[ "ArrowHelper", "api/helpers/ArrowHelper" ],
-			[ "AxisHelper", "api/helpers/AxisHelper" ],
-			[ "BoxHelper", "api/helpers/BoxHelper" ],
-			[ "CameraHelper", "api/helpers/CameraHelper" ],
-			[ "DirectionalLightHelper", "api/helpers/DirectionalLightHelper" ],
-			[ "FaceNormalsHelper", "api/helpers/FaceNormalsHelper" ],
-			[ "GridHelper", "api/helpers/GridHelper" ],
-			[ "PolarGridHelper", "api/helpers/PolarGridHelper" ],
-			[ "HemisphereLightHelper", "api/helpers/HemisphereLightHelper" ],
-			[ "PointLightHelper", "api/helpers/PointLightHelper" ],
-			[ "RectAreaLightHelper", "api/helpers/RectAreaLightHelper" ],
-			[ "SkeletonHelper", "api/helpers/SkeletonHelper" ],
-			[ "SpotLightHelper", "api/helpers/SpotLightHelper" ],
-			[ "VertexNormalsHelper", "api/helpers/VertexNormalsHelper" ]
-		],
-
-		"Lights": [
-			[ "AmbientLight", "api/lights/AmbientLight" ],
-			[ "DirectionalLight", "api/lights/DirectionalLight" ],
-			[ "HemisphereLight", "api/lights/HemisphereLight" ],
-			[ "Light", "api/lights/Light" ],
-			[ "PointLight", "api/lights/PointLight" ],
-			[ "RectAreaLight", "api/lights/RectAreaLight" ],
-			[ "SpotLight", "api/lights/SpotLight" ]
-		],
-
-		"Lights / Shadows": [
-			[ "DirectionalLightShadow", "api/lights/shadows/DirectionalLightShadow" ],
-			[ "LightShadow", "api/lights/shadows/LightShadow" ],
-			[ "RectAreaLightShadow", "api/lights/shadows/RectAreaLightShadow" ],
-			[ "SpotLightShadow", "api/lights/shadows/SpotLightShadow" ]
-		],
-
-		"Loaders": [
-			[ "AnimationLoader", "api/loaders/AnimationLoader" ],
-			[ "AudioLoader", "api/loaders/AudioLoader" ],
-			[ "BufferGeometryLoader", "api/loaders/BufferGeometryLoader" ],
-			[ "Cache", "api/loaders/Cache" ],
-			[ "CompressedTextureLoader", "api/loaders/CompressedTextureLoader" ],
-			[ "CubeTextureLoader", "api/loaders/CubeTextureLoader" ],
-			[ "DataTextureLoader", "api/loaders/DataTextureLoader" ],
-			[ "FileLoader", "api/loaders/FileLoader" ],
-			[ "FontLoader", "api/loaders/FontLoader" ],
-			[ "ImageLoader", "api/loaders/ImageLoader" ],
-			[ "JSONLoader", "api/loaders/JSONLoader" ],
-			[ "Loader", "api/loaders/Loader" ],
-			[ "MaterialLoader", "api/loaders/MaterialLoader" ],
-			[ "ObjectLoader", "api/loaders/ObjectLoader" ],
-			[ "TextureLoader", "api/loaders/TextureLoader" ]
-		],
-
-		"Loaders / Managers": [
-			[ "DefaultLoadingManager", "api/loaders/managers/DefaultLoadingManager" ],
-			[ "LoadingManager", "api/loaders/managers/LoadingManager" ]
-		],
-
-		"Materials": [
-			[ "LineBasicMaterial", "api/materials/LineBasicMaterial" ],
-			[ "LineDashedMaterial", "api/materials/LineDashedMaterial" ],
-			[ "Material", "api/materials/Material" ],
-			[ "MeshBasicMaterial", "api/materials/MeshBasicMaterial" ],
-			[ "MeshDepthMaterial", "api/materials/MeshDepthMaterial" ],
-			[ "MeshLambertMaterial", "api/materials/MeshLambertMaterial" ],
-			[ "MeshNormalMaterial", "api/materials/MeshNormalMaterial" ],
-			[ "MeshPhongMaterial", "api/materials/MeshPhongMaterial" ],
-			[ "MeshPhysicalMaterial", "api/materials/MeshPhysicalMaterial" ],
-			[ "MeshStandardMaterial", "api/materials/MeshStandardMaterial" ],
-			[ "MeshToonMaterial", "api/materials/MeshToonMaterial" ],
-			[ "MultiMaterial", "api/materials/MultiMaterial" ],
-			[ "PointsMaterial", "api/materials/PointsMaterial" ],
-			[ "RawShaderMaterial", "api/materials/RawShaderMaterial" ],
-			[ "ShaderMaterial", "api/materials/ShaderMaterial" ],
-			[ "ShadowMaterial", "api/materials/ShadowMaterial" ],
-			[ "SpriteMaterial", "api/materials/SpriteMaterial" ]
-		],
-
-		"Math": [
-			[ "Box2", "api/math/Box2" ],
-			[ "Box3", "api/math/Box3" ],
-			[ "Color", "api/math/Color" ],
-			[ "Cylindrical", "api/math/Cylindrical" ],
-			[ "Euler", "api/math/Euler" ],
-			[ "Frustum", "api/math/Frustum" ],
-			[ "Interpolant", "api/math/Interpolant" ],
-			[ "Line3", "api/math/Line3" ],
-			[ "Math", "api/math/Math" ],
-			[ "Matrix3", "api/math/Matrix3" ],
-			[ "Matrix4", "api/math/Matrix4" ],
-			[ "Plane", "api/math/Plane" ],
-			[ "Quaternion", "api/math/Quaternion" ],
-			[ "Ray", "api/math/Ray" ],
-			[ "Sphere", "api/math/Sphere" ],
-			[ "Spherical", "api/math/Spherical" ],
-			[ "Triangle", "api/math/Triangle" ],
-			[ "Vector2", "api/math/Vector2" ],
-			[ "Vector3", "api/math/Vector3" ],
-			[ "Vector4", "api/math/Vector4" ]
-		],
-
-		"Math / Interpolants": [
-			[ "CubicInterpolant", "api/math/interpolants/CubicInterpolant" ],
-			[ "DiscreteInterpolant", "api/math/interpolants/DiscreteInterpolant" ],
-			[ "LinearInterpolant", "api/math/interpolants/LinearInterpolant" ],
-			[ "QuaternionLinearInterpolant", "api/math/interpolants/QuaternionLinearInterpolant" ]
-		],
-
-		"Objects": [
-			[ "Bone", "api/objects/Bone" ],
-			[ "Group", "api/objects/Group" ],
-			[ "LensFlare", "api/objects/LensFlare" ],
-			[ "Line", "api/objects/Line" ],
-			[ "LineSegments", "api/objects/LineSegments" ],
-			[ "LOD", "api/objects/LOD" ],
-			[ "Mesh", "api/objects/Mesh" ],
-			[ "Points", "api/objects/Points" ],
-			[ "Skeleton", "api/objects/Skeleton" ],
-			[ "SkinnedMesh", "api/objects/SkinnedMesh" ],
-			[ "Sprite", "api/objects/Sprite" ]
-		],
-
-		"Renderers": [
-			[ "WebGLRenderer", "api/renderers/WebGLRenderer" ],
-			[ "WebGLRenderTarget", "api/renderers/WebGLRenderTarget" ],
-			[ "WebGLRenderTargetCube", "api/renderers/WebGLRenderTargetCube" ]
-		],
-
-		"Renderers / Shaders": [
-			[ "ShaderChunk", "api/renderers/shaders/ShaderChunk" ],
-			[ "ShaderLib", "api/renderers/shaders/ShaderLib" ],
-			[ "UniformsLib", "api/renderers/shaders/UniformsLib" ],
-			[ "UniformsUtils", "api/renderers/shaders/UniformsUtils" ]
-		],
-
-		"Scenes": [
-			[ "Fog", "api/scenes/Fog" ],
-			[ "FogExp2", "api/scenes/FogExp2" ],
-			[ "Scene", "api/scenes/Scene" ]
-		],
-
-		"Textures": [
-			[ "CanvasTexture", "api/textures/CanvasTexture" ],
-			[ "CompressedTexture", "api/textures/CompressedTexture" ],
-			[ "CubeTexture", "api/textures/CubeTexture" ],
-			[ "DataTexture", "api/textures/DataTexture" ],
-			[ "DepthTexture", "api/textures/DepthTexture" ],
-			[ "Texture", "api/textures/Texture" ],
-			[ "VideoTexture", "api/textures/VideoTexture" ]
-		]
+		"Animation": {
+			"AnimationAction": "api/animation/AnimationAction",
+			"AnimationClip": "api/animation/AnimationClip",
+			"AnimationMixer": "api/animation/AnimationMixer",
+			"AnimationObjectGroup": "api/animation/AnimationObjectGroup",
+			"AnimationUtils": "api/animation/AnimationUtils",
+			"KeyframeTrack": "api/animation/KeyframeTrack",
+			"PropertyBinding": "api/animation/PropertyBinding",
+			"PropertyMixer": "api/animation/PropertyMixer"
+		},
+
+		"Animation / Tracks": {
+			"BooleanKeyframeTrack": "api/animation/tracks/BooleanKeyframeTrack",
+			"ColorKeyframeTrack": "api/animation/tracks/ColorKeyframeTrack",
+			"NumberKeyframeTrack": "api/animation/tracks/NumberKeyframeTrack",
+			"QuaternionKeyframeTrack": "api/animation/tracks/QuaternionKeyframeTrack",
+			"StringKeyframeTrack": "api/animation/tracks/StringKeyframeTrack",
+			"VectorKeyframeTrack": "api/animation/tracks/VectorKeyframeTrack"
+		},
+
+		"Audio": {
+			"Audio": "api/audio/Audio",
+			"AudioAnalyser": "api/audio/AudioAnalyser",
+			"AudioContext": "api/audio/AudioContext",
+			"AudioListener": "api/audio/AudioListener",
+			"PositionalAudio": "api/audio/PositionalAudio"
+		},
+
+		"Cameras": {
+			"Camera": "api/cameras/Camera",
+			"CubeCamera": "api/cameras/CubeCamera",
+			"OrthographicCamera": "api/cameras/OrthographicCamera",
+			"PerspectiveCamera": "api/cameras/PerspectiveCamera",
+			"StereoCamera": "api/cameras/StereoCamera"
+		},
+
+		"Constants": {
+			"Animation": "api/constants/Animation",
+			"Core": "api/constants/Core",
+			"CustomBlendingEquation": "api/constants/CustomBlendingEquations",
+			"DrawModes": "api/constants/DrawModes",
+			"Materials": "api/constants/Materials",
+			"Renderer": "api/constants/Renderer",
+			"Textures": "api/constants/Textures"
+		},
+
+		"Core": {
+			"BufferAttribute": "api/core/BufferAttribute",
+			"BufferGeometry": "api/core/BufferGeometry",
+			"Clock": "api/core/Clock",
+			"DirectGeometry": "api/core/DirectGeometry",
+			"EventDispatcher": "api/core/EventDispatcher",
+			"Face3": "api/core/Face3",
+			"Geometry": "api/core/Geometry",
+			"InstancedBufferAttribute": "api/core/InstancedBufferAttribute",
+			"InstancedBufferGeometry": "api/core/InstancedBufferGeometry",
+			"InstancedInterleavedBuffer": "api/core/InstancedInterleavedBuffer",
+			"InterleavedBuffer": "api/core/InterleavedBuffer",
+			"InterleavedBufferAttribute": "api/core/InterleavedBufferAttribute",
+			"Layers": "api/core/Layers",
+			"Object3D": "api/core/Object3D",
+			"Raycaster": "api/core/Raycaster",
+			"Uniform": "api/core/Uniform"
+		},
+
+		"Core / BufferAttributes": {
+			"BufferAttribute Types": "api/core/bufferAttributeTypes/BufferAttributeTypes"
+		},
+
+		"Deprecated": {
+			"DeprecatedList": "api/deprecated/DeprecatedList"
+		},
+
+		"Extras": {
+			"CurveUtils": "api/extras/CurveUtils",
+			"SceneUtils": "api/extras/SceneUtils",
+			"ShapeUtils": "api/extras/ShapeUtils"
+		},
+
+		"Extras / Core": {
+			"Curve": "api/extras/core/Curve",
+			"CurvePath": "api/extras/core/CurvePath",
+			"Font": "api/extras/core/Font",
+			"Path": "api/extras/core/Path",
+			"Shape": "api/extras/core/Shape",
+			"ShapePath": "api/extras/core/ShapePath"
+		},
+
+		"Extras / Curves": {
+			"ArcCurve": "api/extras/curves/ArcCurve",
+			"CatmullRomCurve3": "api/extras/curves/CatmullRomCurve3",
+			"CubicBezierCurve": "api/extras/curves/CubicBezierCurve",
+			"CubicBezierCurve3": "api/extras/curves/CubicBezierCurve3",
+			"EllipseCurve": "api/extras/curves/EllipseCurve",
+			"LineCurve": "api/extras/curves/LineCurve",
+			"LineCurve3": "api/extras/curves/LineCurve3",
+			"QuadraticBezierCurve": "api/extras/curves/QuadraticBezierCurve",
+			"QuadraticBezierCurve3": "api/extras/curves/QuadraticBezierCurve3",
+			"SplineCurve": "api/extras/curves/SplineCurve"
+		},
+
+		"Extras / Objects": {
+			"ImmediateRenderObject": "api/extras/objects/ImmediateRenderObject",
+			"MorphBlendMesh": "api/extras/objects/MorphBlendMesh"
+		},
+
+		"Geometries": {
+			"BoxBufferGeometry": "api/geometries/BoxBufferGeometry",
+			"BoxGeometry": "api/geometries/BoxGeometry",
+			"CircleBufferGeometry": "api/geometries/CircleBufferGeometry",
+			"CircleGeometry": "api/geometries/CircleGeometry",
+			"ConeBufferGeometry": "api/geometries/ConeBufferGeometry",
+			"ConeGeometry": "api/geometries/ConeGeometry",
+			"CylinderBufferGeometry": "api/geometries/CylinderBufferGeometry",
+			"CylinderGeometry": "api/geometries/CylinderGeometry",
+			"DodecahedronBufferGeometry": "api/geometries/DodecahedronBufferGeometry",
+			"DodecahedronGeometry": "api/geometries/DodecahedronGeometry",
+			"EdgesGeometry": "api/geometries/EdgesGeometry",
+			"ExtrudeGeometry": "api/geometries/ExtrudeGeometry",
+			"ExtrudeBufferGeometry": "api/geometries/ExtrudeBufferGeometry",
+			"IcosahedronBufferGeometry": "api/geometries/IcosahedronBufferGeometry",
+			"IcosahedronGeometry": "api/geometries/IcosahedronGeometry",
+			"LatheBufferGeometry": "api/geometries/LatheBufferGeometry",
+			"LatheGeometry": "api/geometries/LatheGeometry",
+			"OctahedronBufferGeometry": "api/geometries/OctahedronBufferGeometry",
+			"OctahedronGeometry": "api/geometries/OctahedronGeometry",
+			"ParametricBufferGeometry": "api/geometries/ParametricBufferGeometry",
+			"ParametricGeometry": "api/geometries/ParametricGeometry",
+			"PlaneBufferGeometry": "api/geometries/PlaneBufferGeometry",
+			"PlaneGeometry": "api/geometries/PlaneGeometry",
+			"PolyhedronBufferGeometry": "api/geometries/PolyhedronBufferGeometry",
+			"PolyhedronGeometry": "api/geometries/PolyhedronGeometry",
+			"RingBufferGeometry": "api/geometries/RingBufferGeometry",
+			"RingGeometry": "api/geometries/RingGeometry",
+			"ShapeBufferGeometry": "api/geometries/ShapeBufferGeometry",
+			"ShapeGeometry": "api/geometries/ShapeGeometry",
+			"SphereBufferGeometry": "api/geometries/SphereBufferGeometry",
+			"SphereGeometry": "api/geometries/SphereGeometry",
+			"TetrahedronBufferGeometry": "api/geometries/TetrahedronBufferGeometry",
+			"TetrahedronGeometry": "api/geometries/TetrahedronGeometry",
+			"TextGeometry": "api/geometries/TextGeometry",
+			"TorusBufferGeometry": "api/geometries/TorusBufferGeometry",
+			"TorusGeometry": "api/geometries/TorusGeometry",
+			"TorusKnotBufferGeometry": "api/geometries/TorusKnotBufferGeometry",
+			"TorusKnotGeometry": "api/geometries/TorusKnotGeometry",
+			"TubeGeometry": "api/geometries/TubeGeometry",
+			"TubeBufferGeometry": "api/geometries/TubeBufferGeometry",
+			"WireframeGeometry": "api/geometries/WireframeGeometry"
+		},
+
+		"Helpers": {
+			"ArrowHelper": "api/helpers/ArrowHelper",
+			"AxisHelper": "api/helpers/AxisHelper",
+			"BoxHelper": "api/helpers/BoxHelper",
+			"CameraHelper": "api/helpers/CameraHelper",
+			"DirectionalLightHelper": "api/helpers/DirectionalLightHelper",
+			"FaceNormalsHelper": "api/helpers/FaceNormalsHelper",
+			"GridHelper": "api/helpers/GridHelper",
+			"PolarGridHelper": "api/helpers/PolarGridHelper",
+			"HemisphereLightHelper": "api/helpers/HemisphereLightHelper",
+			"PointLightHelper": "api/helpers/PointLightHelper",
+			"RectAreaLightHelper": "api/helpers/RectAreaLightHelper",
+			"SkeletonHelper": "api/helpers/SkeletonHelper",
+			"SpotLightHelper": "api/helpers/SpotLightHelper",
+			"VertexNormalsHelper": "api/helpers/VertexNormalsHelper"
+		},
+
+		"Lights": {
+			"AmbientLight": "api/lights/AmbientLight",
+			"DirectionalLight": "api/lights/DirectionalLight",
+			"HemisphereLight": "api/lights/HemisphereLight",
+			"Light": "api/lights/Light",
+			"PointLight": "api/lights/PointLight",
+			"RectAreaLight": "api/lights/RectAreaLight",
+			"SpotLight": "api/lights/SpotLight"
+		},
+
+		"Lights / Shadows": {
+			"DirectionalLightShadow": "api/lights/shadows/DirectionalLightShadow",
+			"LightShadow": "api/lights/shadows/LightShadow",
+			"RectAreaLightShadow": "api/lights/shadows/RectAreaLightShadow",
+			"SpotLightShadow": "api/lights/shadows/SpotLightShadow"
+		},
+
+		"Loaders": {
+			"AnimationLoader": "api/loaders/AnimationLoader",
+			"AudioLoader": "api/loaders/AudioLoader",
+			"BufferGeometryLoader": "api/loaders/BufferGeometryLoader",
+			"Cache": "api/loaders/Cache",
+			"CompressedTextureLoader": "api/loaders/CompressedTextureLoader",
+			"CubeTextureLoader": "api/loaders/CubeTextureLoader",
+			"DataTextureLoader": "api/loaders/DataTextureLoader",
+			"FileLoader": "api/loaders/FileLoader",
+			"FontLoader": "api/loaders/FontLoader",
+			"ImageLoader": "api/loaders/ImageLoader",
+			"JSONLoader": "api/loaders/JSONLoader",
+			"Loader": "api/loaders/Loader",
+			"MaterialLoader": "api/loaders/MaterialLoader",
+			"ObjectLoader": "api/loaders/ObjectLoader",
+			"TextureLoader": "api/loaders/TextureLoader"
+		},
+
+		"Loaders / Managers": {
+			"DefaultLoadingManager": "api/loaders/managers/DefaultLoadingManager",
+			"LoadingManager": "api/loaders/managers/LoadingManager"
+		},
+
+		"Materials": {
+			"LineBasicMaterial": "api/materials/LineBasicMaterial",
+			"LineDashedMaterial": "api/materials/LineDashedMaterial",
+			"Material": "api/materials/Material",
+			"MeshBasicMaterial": "api/materials/MeshBasicMaterial",
+			"MeshDepthMaterial": "api/materials/MeshDepthMaterial",
+			"MeshLambertMaterial": "api/materials/MeshLambertMaterial",
+			"MeshNormalMaterial": "api/materials/MeshNormalMaterial",
+			"MeshPhongMaterial": "api/materials/MeshPhongMaterial",
+			"MeshPhysicalMaterial": "api/materials/MeshPhysicalMaterial",
+			"MeshStandardMaterial": "api/materials/MeshStandardMaterial",
+			"MeshToonMaterial": "api/materials/MeshToonMaterial",
+			"PointsMaterial": "api/materials/PointsMaterial",
+			"RawShaderMaterial": "api/materials/RawShaderMaterial",
+			"ShaderMaterial": "api/materials/ShaderMaterial",
+			"ShadowMaterial": "api/materials/ShadowMaterial",
+			"SpriteMaterial": "api/materials/SpriteMaterial"
+		},
+
+		"Math": {
+			"Box2": "api/math/Box2",
+			"Box3": "api/math/Box3",
+			"Color": "api/math/Color",
+			"Cylindrical": "api/math/Cylindrical",
+			"Euler": "api/math/Euler",
+			"Frustum": "api/math/Frustum",
+			"Interpolant": "api/math/Interpolant",
+			"Line3": "api/math/Line3",
+			"Math": "api/math/Math",
+			"Matrix3": "api/math/Matrix3",
+			"Matrix4": "api/math/Matrix4",
+			"Plane": "api/math/Plane",
+			"Quaternion": "api/math/Quaternion",
+			"Ray": "api/math/Ray",
+			"Sphere": "api/math/Sphere",
+			"Spherical": "api/math/Spherical",
+			"Triangle": "api/math/Triangle",
+			"Vector2": "api/math/Vector2",
+			"Vector3": "api/math/Vector3",
+			"Vector4": "api/math/Vector4"
+		},
+
+		"Math / Interpolants": {
+			"CubicInterpolant": "api/math/interpolants/CubicInterpolant",
+			"DiscreteInterpolant": "api/math/interpolants/DiscreteInterpolant",
+			"LinearInterpolant": "api/math/interpolants/LinearInterpolant",
+			"QuaternionLinearInterpolant": "api/math/interpolants/QuaternionLinearInterpolant"
+		},
+
+		"Objects": {
+			"Bone": "api/objects/Bone",
+			"Group": "api/objects/Group",
+			"LensFlare": "api/objects/LensFlare",
+			"Line": "api/objects/Line",
+			"LineLoop": "api/objects/LineLoop",
+			"LineSegments": "api/objects/LineSegments",
+			"LOD": "api/objects/LOD",
+			"Mesh": "api/objects/Mesh",
+			"Points": "api/objects/Points",
+			"Skeleton": "api/objects/Skeleton",
+			"SkinnedMesh": "api/objects/SkinnedMesh",
+			"Sprite": "api/objects/Sprite"
+		},
+
+		"Renderers": {
+			"WebGLRenderer": "api/renderers/WebGLRenderer",
+			"WebGLRenderTarget": "api/renderers/WebGLRenderTarget",
+			"WebGLRenderTargetCube": "api/renderers/WebGLRenderTargetCube"
+		},
+
+		"Renderers / Shaders": {
+			"ShaderChunk": "api/renderers/shaders/ShaderChunk",
+			"ShaderLib": "api/renderers/shaders/ShaderLib",
+			"UniformsLib": "api/renderers/shaders/UniformsLib",
+			"UniformsUtils": "api/renderers/shaders/UniformsUtils"
+		},
+
+		"Scenes": {
+			"Fog": "api/scenes/Fog",
+			"FogExp2": "api/scenes/FogExp2",
+			"Scene": "api/scenes/Scene"
+		},
+
+		"Textures": {
+			"CanvasTexture": "api/textures/CanvasTexture",
+			"CompressedTexture": "api/textures/CompressedTexture",
+			"CubeTexture": "api/textures/CubeTexture",
+			"DataTexture": "api/textures/DataTexture",
+			"DepthTexture": "api/textures/DepthTexture",
+			"Texture": "api/textures/Texture",
+			"VideoTexture": "api/textures/VideoTexture"
+		}
 
 	},
 
 	"Examples": {
 
-		"Collada Animation": [
-			[ "ColladaAnimation", "examples/collada/Animation" ],
-			[ "AnimationHandler", "examples/collada/AnimationHandler" ],
-			[ "KeyFrameAnimation", "examples/collada/KeyFrameAnimation" ]
-		],
-
-		"Loaders": [
-			[ "BabylonLoader", "examples/loaders/BabylonLoader" ],
-			[ "ColladaLoader", "examples/loaders/ColladaLoader" ],
-			[ "GLTFLoader", "examples/loaders/GLTFLoader" ],
-			[ "MTLLoader", "examples/loaders/MTLLoader" ],
-			[ "OBJLoader", "examples/loaders/OBJLoader" ],
-			[ "PCDLoader", "examples/loaders/PCDLoader" ],
-			[ "PDBLoader", "examples/loaders/PDBLoader" ],
-			[ "SVGLoader", "examples/loaders/SVGLoader" ],
-			[ "TGALoader", "examples/loaders/TGALoader" ]
-		],
-
-		"Plugins": [
-			[ "CombinedCamera", "examples/cameras/CombinedCamera" ],
-			[ "LookupTable", "examples/Lut" ],
-			[ "SpriteCanvasMaterial", "examples/SpriteCanvasMaterial" ]
-		],
-
-		"Renderers": [
-			[ "CanvasRenderer", "examples/renderers/CanvasRenderer" ]
-		]
+		"Collada Animation": {
+			"ColladaAnimation": "examples/collada/Animation",
+			"AnimationHandler": "examples/collada/AnimationHandler",
+			"KeyFrameAnimation": "examples/collada/KeyFrameAnimation"
+		},
+
+		"Geometries": {
+			"ConvexBufferGeometry": "examples/geometries/ConvexBufferGeometry",
+			"ConvexGeometry": "examples/geometries/ConvexGeometry"
+		},
+
+		"Loaders": {
+			"BabylonLoader": "examples/loaders/BabylonLoader",
+			"ColladaLoader": "examples/loaders/ColladaLoader",
+			"GLTF2Loader": "examples/loaders/GLTF2Loader",
+			"MTLLoader": "examples/loaders/MTLLoader",
+			"OBJLoader": "examples/loaders/OBJLoader",
+			"PCDLoader": "examples/loaders/PCDLoader",
+			"PDBLoader": "examples/loaders/PDBLoader",
+			"SVGLoader": "examples/loaders/SVGLoader",
+			"TGALoader": "examples/loaders/TGALoader"
+		},
+
+		"Plugins": {
+			"CombinedCamera": "examples/cameras/CombinedCamera",
+			"LookupTable": "examples/Lut",
+			"SpriteCanvasMaterial": "examples/SpriteCanvasMaterial"
+		},
+
+		"QuickHull": {
+			"Face": "examples/quickhull/Face",
+			"HalfEdge": "examples/quickhull/HalfEdge",
+			"QuickHull": "examples/quickhull/QuickHull",
+			"VertexNode": "examples/quickhull/VertexNode",
+			"VertexList": "examples/quickhull/VertexList"
+		},
+
+		"Renderers": {
+			"CanvasRenderer": "examples/renderers/CanvasRenderer"
+		}
 
 	},
 
 	"Developer Reference": {
-		"Polyfills": [
-			[ "Polyfills", "api/Polyfills" ]
-		],
-
-		"WebGLRenderer": [
-			[ "WebGLProgram", "api/renderers/webgl/WebGLProgram" ],
-			[ "WebGLShader", "api/renderers/webgl/WebGLShader" ],
-			[ "WebGLState", "api/renderers/webgl/WebGLState" ]
-		],
-
-		"WebGLRenderer / Plugins": [
-			[ "LensFlarePlugin", "api/renderers/webgl/plugins/LensFlarePlugin" ],
-			[ "SpritePlugin", "api/renderers/webgl/plugins/SpritePlugin" ]
-		]
-
-	}
-
-};
-
-var pages = {};
-
-for ( var section in list ) {
-
-	pages[ section ] = {};
-
-	for ( var category in list[ section ] ) {
-
-		pages[ section ][ category ] = {};
 
-		for ( var i = 0; i < list[ section ][ category ].length; i ++ ) {
+		"Polyfills": {
+			"Polyfills": "api/Polyfills"
+		},
 
-			var page = list[ section ][ category ][ i ];
-			pages[ section ][ category ][ page[ 0 ] ] = page[ 1 ];
+		"WebGLRenderer": {
+			"WebGLProgram": "api/renderers/webgl/WebGLProgram",
+			"WebGLShader": "api/renderers/webgl/WebGLShader",
+			"WebGLState": "api/renderers/webgl/WebGLState"
+		},
 
+		"WebGLRenderer / Plugins": {
+			"LensFlarePlugin": "api/renderers/webgl/plugins/LensFlarePlugin",
+			"SpritePlugin": "api/renderers/webgl/plugins/SpritePlugin"
 		}
 
 	}

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

@@ -187,7 +187,7 @@ The THREE object should be able to construct a Vector3 with default of x=0: 0ms
 			<ol>
 				<li>
 					Write a test for the expected behaviour of your code, and place it under test/.
-					[linkk:https://github.com/air/encounter/blob/master/test/Physics-test.js Here] is an example from a real project.
+					[link:https://github.com/air/encounter/blob/master/test/Physics-test.js Here] is an example from a real project.
 				</li>
 
 				<li>

+ 151 - 0
docs/manual/introduction/Animation-system.html

@@ -0,0 +1,151 @@
+<!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>
+
+		<h2>Overview</h2>
+
+		<div class="desc">
+			Within the three.js animation system you can animate various properties of your models:
+			the bones of a [page:SkinnedMesh skinned and rigged model],
+			[page:Geometry.morphTargets morph targets], different material properties (colors,
+			opacity, booleans), visibility and transforms. The animated properties can be faded in,
+			faded out, crossfaded and warped. The weight and time scales of different simultaneous
+			animations on the same object as well as on different objects can be changed
+			independently. Various animations on the same and on different objects can be
+			synchronized.<br /><br />
+
+			To achieve all this in one homogeneous system, the three.js animation system
+			[link:https://github.com/mrdoob/three.js/issues/6881 has completely changed in 2015]
+			(be aware of outdated information!), and it has now an architecture similar to
+			Unity/Unreal Engine 4. This page gives a short overview of the main components of the
+			system and how they work together.
+
+		</div>
+
+		<h3>Animation Clips</h3>
+
+		<div class="desc">
+
+			If you have successfully imported an animated 3D object (it doesn't matter if it has
+			bones or morph targets or both) - for example exporting it from Blender with the
+			[link:https://github.com/mrdoob/three.js/tree/master/utils/exporters/blender/addons/io_three Blender exporter] and
+			loading it into a three.js scene using [page:JSONLoader] -, one of the geometry's
+			properties of the loaded mesh should be an array named "animations", containing the
+			[page:AnimationClip AnimationClips] for this model (see a list of possible loaders below).<br /><br />
+
+			Each *AnimationClip* usually holds the data for a certain activity of the object. If the
+			mesh is a character, for example, there may be one AnimationClip for a walkcycle, a second
+			for a jump, a third for sidestepping and so on.
+
+		</div>
+
+		<h3>Keyframe Tracks</h3>
+
+		<div class="desc">
+
+			Inside of such an *AnimationClip* the data for each animated property are stored in a
+			separate [page:KeyframeTrack]. Assumed a character object has a [page:Skeleton skeleton],
+			one keyframe track could store the data for the position changes of the lower arm bone
+			over time, a different track the data for the rotation changes of the same bone, a third
+			the track position, rotation or scaling of another bone, and so on. It should be clear,
+			that an AnimationClip can be composed of lots of such tracks.<br /><br />
+
+			Assumed the model has [page:Geometry.morphTargets morph targets] (for example one morph
+			target showing a friendly face and another showing an angry face), each track holds the
+			information as to how the [page:Mesh.morphTargetInfluences influence] of a certain morph
+			target changes during the performance of the clip.
+
+		</div>
+
+		<h3>Animation Mixer</h3>
+
+		<div class="desc">
+
+			The stored data form only the basis for the animations - actual playback is controlled by
+			the [page:AnimationMixer]. You can imagine this not only as a player for animations, but
+			as a simulation of a hardware like a real mixer console, which can control several animations
+			simultaneously, blending and merging them.
+
+		</div>
+
+		<h3>Animation Actions</h3>
+
+		<div class="desc">
+
+			The *AnimationMixer* itself has only very few (general) properties and methods, because it
+			can be controlled by the [page:AnimationAction AnimationActions]. By configuring an
+			*AnimationAction* you can determine when a certain *AnimationClip* shall be played, paused
+			or stopped on one of the mixers, if and how often the clip has to be repeated, whether it
+			shall be performed with a fade or a time scaling, and some additional things, such crossfading
+			or synchronizing.
+
+		</div>
+
+		<h3>Animation Object Groups</h3>
+
+		<div class="desc">
+
+			If you want a group of objects to receive a shared animation state, you can use an
+			[page:AnimationObjectGroup]. 
+
+		</div>
+
+		<h3>Supported Formats and Loaders</h3>
+
+		<div class="desc">
+			Note that not all model formats include animation (OBJ notably does not), and that only some
+			three.js loaders support [page:AnimationClip AnimationClip] sequences. Several that <i>do</i>
+			support this animation type:
+		</div>
+
+			<ul>
+				<li>[page:JSONLoader THREE.JSONLoader]</li>
+				<li>[page:ObjectLoader THREE.ObjectLoader]</li>
+				<li>THREE.BVHLoader</li>
+				<li>THREE.FBXLoader</li>
+				<li>THREE.FBXLoader2</li>
+				<li>[page:GLTF2Loader THREE.GLTF2Loader]</li>
+				<li>THREE.MMDLoader</li>
+				<li>THREE.SEA3DLoader</li>
+			</ul>
+
+		<div class="desc">
+			Note that 3ds max and Maya currently can't export multiple animations (meaning animations which are not
+			on the same timeline) directly to a single file.
+		</div>
+
+		<h2>Example</h2>
+
+		<code>
+		var mesh;
+
+		// Create an AnimationMixer, and get the list of AnimationClip instances
+		var mixer = new THREE.AnimationMixer( mesh );
+		var clips = mesh.animations;
+
+		// Update the mixer on each frame
+		function update () {
+			mixer.update( deltaSeconds );
+		}
+
+		// Play a specific animation
+		var clip = THREE.AnimationClip.findByName( clips, 'dance' );
+		var action = mixer.clipAction( clip );
+		action.play();
+
+		// Play all animations
+		clips.forEach( function ( clip ) {
+			mixer.clipAction( clip ).play();
+		} );
+		</code>
+
+	</body>
+</html>

+ 1 - 1
docs/manual/introduction/Code-style-guide.html

@@ -16,7 +16,7 @@
 			if you are adding code to the library or examples then you must follow this guide.<br /><br />
 
 			You can find details
-			<a href="https://github.com/mrdoob/three.js/wiki/Mr.doob%27s-Code-Style%E2%84%A2">here</a>.
+			<a href="https://github.com/mrdoob/three.js/wiki/Mr.doob%27s-Code-Style%E2%84%A2" target="_blank">here</a>.
 		</div>
 	</body>
 </html>

+ 12 - 6
docs/manual/introduction/Creating-text.html

@@ -61,13 +61,19 @@
 		<h2>4. Procedural Text Geometry</h2>
 		<div>
 			<p>
-				Use this method if you prefer to work purely in three.js or create procedural and dynamic 3d
-				text geometries. However, font data files in THREE.js JSON format needs to be loaded
-				before this will work.
-				See the [page:TextGeometry] page for examples of JSON fonts.
+				If you prefer to work purely in THREE.js or to create procedural and dynamic 3D
+				text geometries, you can create a mesh whose geometry is an instance of THREE.TextGeometry:
+			</p>
+			<p>
+				<code>new THREE.TextGeometry( text, parameters );</code>
+			</p>
+			<p>
+				In order for this to work, however, your TextGeomety will need an instance of THREE.Font 
+				to be set on its "font" parameter.
+
+				See the [page:TextGeometry] page for more info on how this can be done, descriptions of each
+				accepted parameter, and a list of the JSON fonts that come with the THREE.js distribution itself.
 			</p>
-			<p>A Text Geometry can then be created with </p>
-			<code>new THREE.TextGeometry( text, parameters );</code>
 
 			<h3>Examples</h3>
 			[example:webgl_geometry_text WebGL / geometry / text]<br />

+ 3 - 3
docs/manual/introduction/Drawing-lines.html

@@ -27,7 +27,7 @@ camera.lookAt(new THREE.Vector3(0, 0, 0));
 
 var scene = new THREE.Scene();
 			</code>
-			<p>Next thing we will do is define a material. For lines we have to use [page:LineBasicMaterial] oe [page:LineDashedMaterial].</p>
+			<p>Next thing we will do is define a material. For lines we have to use [page:LineBasicMaterial] or [page:LineDashedMaterial].</p>
 			<code>
 //create a blue LineBasicMaterial
 var material = new THREE.LineBasicMaterial({ color: 0x0000ff });
@@ -35,7 +35,7 @@ var material = new THREE.LineBasicMaterial({ color: 0x0000ff });
 
 			<p>
 				After material we will need a [page:Geometry] or [page:BufferGeometry] with some vertices
-				(it's reccomended to use a BufferGeometry as it's more performant, however for simplicity we'll use a Geometry here):
+				(it's recommended to use a BufferGeometry as it's more performant, however for simplicity we'll use a Geometry here):
 			</p>
 
 			<code>
@@ -58,7 +58,7 @@ scene.add(line);
 renderer.render(scene, camera);
 			</code>
 
-			<p>You should now be seeing a arrow pointing upwards, made from two blue lines.</p>
+			<p>You should now be seeing an arrow pointing upwards, made from two blue lines.</p>
 		</div>
 	</body>
 </html>

+ 1 - 1
docs/manual/introduction/FAQ.html

@@ -32,7 +32,7 @@ TODO
 
 			The key equation to solving this is this formula for the visible height at a given distance:
 
-			<code>s
+			<code>
 visible_height = 2 * Math.tan( ( Math.PI / 180 ) * camera.fov / 2 ) * distance_from_camera;
 			</code>
 			If we increase the window height by a certain percentage, then what we want is the visible height at all distances

+ 2 - 3
docs/manual/introduction/How-to-run-thing-locally.html

@@ -26,10 +26,10 @@
 
 			<ol>
 				<li>
-					Change security for local files in a browser (this allows you to access your page as <code>file:///yourFile.html</code>
+					Change security for local files in a browser. This allows you to access your page as: <code>file:///yourFile.html</code>
 				</li>
 				<li>
-					Run files from a local web server (this allows you to access your page as <code>http://localhost/yourFile.html</code>
+					Run files from a local web server. This allows you to access your page as: <code>http://localhost/yourFile.html</code>
 				</li>
 			</ol>
 
@@ -165,7 +165,6 @@ ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot =>
 					<li>
 						Create a configuration file called lighttpd.conf in the directory where you want to run
 						your webserver. There is a sample [link:http://redmine.lighttpd.net/projects/lighttpd/wiki/TutorialConfiguration here].
-						 page.
 					 </li>
 					<li>
 						In the conf file, change the server.document-root to the directory you want to serve files from.

+ 10 - 9
docs/manual/introduction/How-to-update-things.html

@@ -10,7 +10,7 @@
 	<body>
 		<h1>[name]</h1>
 		<div>
-			<p>All objects by default automatically update their matrices if the have been added to the scene with</p>
+			<p>All objects by default automatically update their matrices if they have been added to the scene with</p>
 			<code>
 var object = new THREE.Object3D;
 scene.add( object );
@@ -44,12 +44,12 @@ object.updateMatrix();
 					work with.
 				</p>
 				<p>
-					With regards to updating BufferGeometries, the most important thing to understand is that you
-					you cannot resize buffers (this is very costly,	basically the equivalent to creating new a geometry).
+					With regards to updating BufferGeometries, the most important thing to understand is that
+					you cannot resize buffers (this is very costly,	basically the equivalent to creating a new geometry).
 					You can however update the content of buffers.
 				</p>
 				<p>
-					This means that if you know an attribute of you BufferGeometry will grow, say the number of vertices,
+					This means that if you know an attribute of your BufferGeometry will grow, say the number of vertices,
 					you must pre-allocate a buffer large enough to hold any new vertices that may be created. Of
 					course, this also means that there will be a maximum size for your BufferGeometry - there is
 					no way to create a BufferGeometry that can efficiently be extended indefinitely.
@@ -69,14 +69,14 @@ var positions = new Float32Array( MAX_POINTS * 3 ); // 3 vertices per point
 geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
 
 // draw range
-drawCount = 2; // draw the first 2 points, only
+var drawCount = 2; // draw the first 2 points, only
 geometry.setDrawRange( 0, drawCount );
 
 // material
 var material = new THREE.LineBasicMaterial( { color: 0xff0000, linewidth: 2 } );
 
 // line
-line = new THREE.Line( geometry,  material );
+var line = new THREE.Line( geometry,  material );
 scene.add( line );
 				</code>
 			 	<p>
@@ -85,7 +85,8 @@ scene.add( line );
 				<code>
 var positions = line.geometry.attributes.position.array;
 
-var x = y = z = index = 0;
+var x, y, z, index;
+x = y = z = index = 0;
 
 for ( var i = 0, l = MAX_POINTS; i < l; i ++ ) {
 
@@ -127,10 +128,10 @@ line.geometry.attributes.position.needsUpdate = true; // required after the firs
 			<h3>[page:Geometry]</h3>
 			<div>
 				<p>
-					The following flag control updating of various geometry attributes. Set flags only
+					The following flags control updating of various geometry attributes. Set flags only
 					for attributes that you need to update, updates are costly. Once buffers
 					change, these flags reset automatically back to false. You need to keep setting them to
-					true if you wanna keep updating buffers. Note that this applies only to [page:Geometry]
+					true if you want to keep updating buffers. Note that this applies only to [page:Geometry]
 					and not to [page:BufferGeometry].
 				</p>
 				<code>

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

@@ -51,7 +51,7 @@
 			</li>
 		 <li>
 			 [link:https://www.udacity.com/course/cs291 Interactive 3D Graphics] - a free course on Udacity that teaches the fundamentals of 3D Graphics,
-			 and uses three.js as it coding tool.
+			 and uses three.js as its coding tool.
 		 </li>
 		 <li>
 			[Link:https://aerotwist.com/tutorials/ Aerotwist] tutorials by [link:https://github.com/paullewis/ Paul Lewis].
@@ -81,7 +81,7 @@
 		<ul>
 			<li>
 				[link:http://threejsdoc.appspot.com/doc/index.html threejsdoc] - less descriptive than the official docs here, however this is
-				useful because it links every API element to to every official three.js [link:https://threejs.org/examples/ example] that uses it.
+				useful because it links every API element to every official three.js [link:https://threejs.org/examples/ example] that uses it.
 			</li>
 			<li>
 				[link:http://ushiroad.com/3j/ Three.js walking map] - a graphical breakdown of the structure of a three.js scene.
@@ -97,7 +97,7 @@
 				[link:http://www.reddit.com/r/webgl/ WebGL on reddit]
 			</li>
 			<li>
-				[link:http://learningwebgl.com/blog/ Learning WebGL Blog] – The authoritaive news source for WebGL.
+				[link:http://learningwebgl.com/blog/ Learning WebGL Blog] – The authoritive news source for WebGL.
 			</li>
 			<li>
 				[link:https://plus.google.com/104300307601542851567/posts Three.js posts] on Google+ – frequent posts on Three.js

+ 0 - 0
docs/manual/introduction/Detecting-WebGL-and-browser-compatibility.html → docs/manual/introduction/WebGL-compatibility-check.html


+ 9 - 5
docs/page.css

@@ -17,6 +17,8 @@ body {
 
 a {
 	color: #1184CE;
+	cursor: pointer;
+	text-decoration: underline;
 }
 
 h1 {
@@ -40,7 +42,7 @@ h3 {
 	font-size: 16px;
 	font-weight: normal;
 
-	margin-top: 30px;
+	margin-top: 40px;
 }
 
 div {
@@ -56,6 +58,7 @@ pre, code {
 	margin-top: 20px;
 	margin-bottom: 20px;
 }
+
 code {
 	display: block;
 	width: -webkit-calc( 100% - 40px );
@@ -77,6 +80,7 @@ th {
 	padding: 10px;
 	text-decoration: underline;
 }
+
 td {
 	text-align: center;
 }
@@ -102,10 +106,10 @@ strong {
 	opacity: 0.5;
 }
 
-	#button:hover {
-		cursor: pointer;
-		opacity: 1;
-	}
+#button:hover {
+	cursor: pointer;
+	opacity: 1;
+}
 
 a.permalink {
 	float: right;

+ 29 - 3
docs/page.js

@@ -1,3 +1,29 @@
+if ( !window.frameElement && window.location.protocol !== 'file:' ) {
+
+	// If the page is not yet displayed as an iframe of the index page (navigation panel/working links),
+	// redirect to the index page (using the current URL without extension as the new fragment).
+	// If this URL itself has a fragment, append it with a dot (since '#' in an URL fragment is not allowed).
+
+	var href = window.location.href;
+	var splitIndex = href.lastIndexOf( '/docs/' ) + 6;
+	var docsBaseURL = href.substr( 0, splitIndex );
+
+	var hash = window.location.hash;
+
+	if ( hash !== '' ) {
+
+		href = href.replace( hash, '' );
+		hash = hash.replace( '#', '.' );
+
+	}
+
+	var pathSnippet = href.slice( splitIndex, -5 );
+
+	window.location.replace( docsBaseURL + '#' + pathSnippet + hash );
+
+}
+
+
 var onDocumentLoad = function ( event ) {
 
 	var path;
@@ -30,11 +56,11 @@ var onDocumentLoad = function ( event ) {
 	text = text.replace( /\[path\]/gi, path );
 	text = text.replace( /\[page:([\w\.]+)\]/gi, "[page:$1 $1]" ); // [page:name] to [page:name title]
 	text = text.replace( /\[page:\.([\w\.]+) ([\w\.\s]+)\]/gi, "[page:" + name + ".$1 $2]" ); // [page:.member title] to [page:name.member title]
-	text = text.replace( /\[page:([\w\.]+) ([\w\.\s]+)\]/gi, "<a href=\"javascript:window.parent.goTo('$1')\" title=\"$1\">$2</a>" ); // [page:name title]
-	// text = text.replace( /\[member:.([\w]+) ([\w\.\s]+)\]/gi, "<a href=\"javascript:window.parent.goTo('" + name + ".$1')\" title=\"$1\">$2</a>" );
+	text = text.replace( /\[page:([\w\.]+) ([\w\.\s]+)\]/gi, "<a onclick=\"window.parent.setUrlFragment('$1')\" title=\"$1\">$2</a>" ); // [page:name title]
+	// text = text.replace( /\[member:.([\w]+) ([\w\.\s]+)\]/gi, "<a onclick=\"window.parent.setUrlFragment('" + name + ".$1')\" title=\"$1\">$2</a>" );
 
 	text = text.replace( /\[(?:member|property|method):([\w]+)\]/gi, "[member:$1 $1]" ); // [member:name] to [member:name title]
-	text = text.replace( /\[(?:member|property|method):([\w]+) ([\w\.\s]+)\]/gi, "<a href=\"javascript:window.parent.goTo('" + name + ".$2')\" target=\"_parent\" title=\"" + name + ".$2\" class=\"permalink\">#</a> .<a href=\"javascript:window.parent.goTo('$1')\" title=\"$1\" id=\"$2\">$2</a> " );
+	text = text.replace( /\[(?:member|property|method):([\w]+) ([\w\.\s]+)\]/gi, "<a onclick=\"window.parent.setUrlFragment('" + name + ".$2')\" target=\"_parent\" title=\"" + name + ".$2\" class=\"permalink\">#</a> .<a onclick=\"window.parent.setUrlFragment('$1')\" title=\"$1\" id=\"$2\">$2</a> " );
 
 	text = text.replace( /\[link:([\w|\:|\/|\.|\-|\_]+)\]/gi, "[link:$1 $1]" ); // [link:url] to [link:url title]
 	text = text.replace( /\[link:([\w|\:|\/|\.|\-|\_|\(|\)|\#]+) ([\w|\:|\/|\.|\-|\_|\s]+)\]/gi, "<a href=\"$1\"  target=\"_blank\">$2</a>" ); // [link:url title]

+ 45 - 3
docs/scenes/js/geometry.js

@@ -91,7 +91,9 @@ function updateGroupGeometry( mesh, geometry ) {
 
 }
 
-function CustomSinCurve( scale ){
+function CustomSinCurve( scale ) {
+
+	THREE.Curve.call( this );
 
 	this.scale = ( scale === undefined ) ? 1 : scale;
 
@@ -744,7 +746,7 @@ var guis = {
 
 		var folder = gui.addFolder( 'THREE.RingBufferGeometry' );
 
-		folder.add( data, 'innerRadius', 0, 30 ).onChange( generateGeometry );
+		folder.add( data, 'innerRadius', 1, 30 ).onChange( generateGeometry );
 		folder.add( data, 'outerRadius', 1, 30 ).onChange( generateGeometry );
 		folder.add( data, 'thetaSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
 		folder.add( data, 'phiSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
@@ -778,7 +780,7 @@ var guis = {
 
 		var folder = gui.addFolder( 'THREE.RingGeometry' );
 
-		folder.add( data, 'innerRadius', 0, 30 ).onChange( generateGeometry );
+		folder.add( data, 'innerRadius', 1, 30 ).onChange( generateGeometry );
 		folder.add( data, 'outerRadius', 1, 30 ).onChange( generateGeometry );
 		folder.add( data, 'thetaSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
 		folder.add( data, 'phiSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
@@ -1300,6 +1302,46 @@ var guis = {
 
 		generateGeometry();
 
+	},
+
+	ExtrudeBufferGeometry: function( mesh ) {
+
+		var data = {
+			steps: 2,
+			amount: 16,
+			bevelEnabled: true,
+			bevelThickness: 1,
+			bevelSize: 1,
+			bevelSegments: 1
+		};
+
+		var length = 12, width = 8;
+
+		var shape = new THREE.Shape();
+		shape.moveTo( 0,0 );
+		shape.lineTo( 0, width );
+		shape.lineTo( length, width );
+		shape.lineTo( length, 0 );
+		shape.lineTo( 0, 0 );
+
+		function generateGeometry() {
+
+			updateGroupGeometry( mesh,
+				new THREE.ExtrudeBufferGeometry( shape, data )
+			);
+
+		}
+
+		var folder = gui.addFolder( 'THREE.ExtrudeBufferGeometry' );
+
+		folder.add( data, 'steps', 1, 10 ).step( 1 ).onChange( generateGeometry );
+		folder.add( data, 'amount', 1, 20 ).step( 1 ).onChange( generateGeometry );
+		folder.add( data, 'bevelThickness', 1, 5 ).step( 1 ).onChange( generateGeometry );
+		folder.add( data, 'bevelSize', 1, 5 ).step( 1 ).onChange( generateGeometry );
+		folder.add( data, 'bevelSegments', 1, 5 ).step( 1 ).onChange( generateGeometry );
+
+		generateGeometry();
+
 	}
 
 };

+ 0 - 8
editor/css/dark.css

@@ -245,11 +245,3 @@ select {
 	.Outliner .option.active {
 		background-color: rgba(21,60,94,1);
 	}
-
-.Panel.Collapsible.collapsed .Static .Button {
-	border-left-color: #444;
-}
-
-.Panel.Collapsible:not(.collapsed) .Static .Button {
-	border-top-color: #444;
-}

+ 0 - 26
editor/css/main.css

@@ -41,32 +41,6 @@ textarea, input { outline: none; } /* osx */
 	user-select: none;
 }
 
-	.Panel.Collapsible .Static {
-		margin: 0;
-	}
-
-	.Panel.Collapsible .Static .Button {
-		float: left;
-		margin-right: 6px;
-		width: 0;
-		height: 0;
-		border: 6px solid transparent;
-	}
-
-	.Panel.Collapsible.collapsed .Static .Button {
-		margin-top: 2px;
-		border-left-color: #bbb;
-	}
-
-	.Panel.Collapsible:not(.collapsed) .Static .Button {
-		margin-top: 6px;
-		border-top-color: #bbb;
-	}
-
-	.Panel.Collapsible.collapsed .Content {
-		display: none;
-	}
-
 /* CodeMirror */
 
 .CodeMirror {

+ 87 - 0
editor/examples/shaders.app.json

@@ -0,0 +1,87 @@
+{
+	"metadata": {
+		"type": "App"
+	},
+	"project": {
+		"gammaInput": true,
+		"gammaOutput": true,
+		"shadows": true,
+		"vr": false
+	},
+	"camera": {
+		"metadata": {
+			"version": 4.4,
+			"type": "Object",
+			"generator": "Object3D.toJSON"
+		},
+		"object": {
+			"uuid": "FC3E973B-5A4A-4177-BD9C-A58E61E0593B",
+			"type": "PerspectiveCamera",
+			"name": "Camera",
+			"matrix": [0.605503,0,-0.795843,0,-0.261526,0.944464,-0.198978,0,0.751645,0.328615,0.571876,0,2.571484,1.124239,1.956469,1],
+			"fov": 50,
+			"zoom": 1,
+			"near": 0.1,
+			"far": 10000,
+			"focus": 10,
+			"aspect": 1.368715,
+			"filmGauge": 35,
+			"filmOffset": 0
+		}
+	},
+	"scene": {
+		"metadata": {
+			"version": 4.4,
+			"type": "Object",
+			"generator": "Object3D.toJSON"
+		},
+		"geometries": [
+			{
+				"uuid": "EA781333-F3AE-470D-9110-A9724FCB42AA",
+				"type": "IcosahedronGeometry",
+				"radius": 1,
+				"detail": 4
+			}],
+		"materials": [
+			{
+				"uuid": "50ED51F1-DEA4-4B61-8082-BF41609E8C27",
+				"type": "ShaderMaterial",
+				"depthFunc": 3,
+				"depthTest": true,
+				"depthWrite": true,
+				"wireframe": true,
+				"skinning": false,
+				"morphTargets": false,
+				"uniforms": {
+					"time": {
+						"value": 0.0
+					}
+				},
+				"vertexShader": "uniform float time;\nvarying vec3 vPosition;\nvoid main() {\n\tvPosition = position;\n\tvPosition.x += sin( time + vPosition.z * 4.0 ) / 4.0;\n\tvPosition.y += cos( time + vPosition.z * 4.0 ) / 4.0;\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( vPosition, 1.0 );\n}",
+				"fragmentShader": "varying vec3 vPosition;\nvoid main() {\n\tgl_FragColor = vec4( vPosition * 2.0, 1.0 );\n}"
+			}],
+		"object": {
+			"uuid": "5FC9ACA9-2A93-474D-AA32-FACC76551914",
+			"type": "Scene",
+			"name": "Scene",
+			"matrix": [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],
+			"children": [
+				{
+					"uuid": "FC7B6CF2-6386-4F47-9CE6-8ADB9FCA6E1F",
+					"type": "Mesh",
+					"name": "Icosahedron 1",
+					"matrix": [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],
+					"geometry": "EA781333-F3AE-470D-9110-A9724FCB42AA",
+					"material": "50ED51F1-DEA4-4B61-8082-BF41609E8C27"
+				}],
+			"background": 11184810
+		}
+	},
+	"scripts": {
+		"FC7B6CF2-6386-4F47-9CE6-8ADB9FCA6E1F": [
+			{
+				"name": "",
+				"source": "function update( event ) {\n\n\tthis.material.uniforms.time.value = event.time / 500.0;\n\n}"
+			}]
+	}
+}

+ 1 - 3
editor/index.html

@@ -34,7 +34,7 @@
 		<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/FBXLoader.js"></script>
+		<script src="../examples/js/loaders/FBXLoader2.js"></script>
 		<script src="../examples/js/loaders/GLTFLoader.js"></script>
 		<script src="../examples/js/loaders/KMZLoader.js"></script>
 		<script src="../examples/js/loaders/MD2Loader.js"></script>
@@ -52,8 +52,6 @@
 		<script src="../examples/js/exporters/OBJExporter.js"></script>
 		<script src="../examples/js/exporters/STLExporter.js"></script>
 
-		<script src="../examples/js/loaders/deprecated/SceneLoader.js"></script>
-
 		<script src="../examples/js/renderers/Projector.js"></script>
 		<script src="../examples/js/renderers/CanvasRenderer.js"></script>
 		<script src="../examples/js/renderers/RaytracingRenderer.js"></script>

+ 1 - 2
editor/js/Editor.js

@@ -75,8 +75,7 @@ var Editor = function () {
 
 		showGridChanged: new Signal(),
 		refreshSidebarObject3D: new Signal(),
-		historyChanged: new Signal(),
-		refreshScriptEditor: new Signal()
+		historyChanged: new Signal()
 
 	};
 

+ 0 - 13
editor/js/Loader.js

@@ -525,19 +525,6 @@ var Loader = function ( editor ) {
 
 				break;
 
-			case 'scene':
-
-				// DEPRECATED
-
-				var loader = new THREE.SceneLoader();
-				loader.parse( data, function ( result ) {
-
-					editor.execute( new SetSceneCommand( result.scene ) );
-
-				}, '' );
-
-				break;
-
 			case 'app':
 
 				editor.fromJSON( data );

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