super-three 0.158.0 → 0.160.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/build/three.cjs +1720 -380
  2. package/build/three.js +1720 -380
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +1719 -381
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/Addons.js +2 -1
  7. package/examples/jsm/controls/OrbitControls.js +50 -40
  8. package/examples/jsm/csm/CSMShader.js +52 -47
  9. package/examples/jsm/exporters/GLTFExporter.js +79 -1
  10. package/examples/jsm/exporters/USDZExporter.js +27 -19
  11. package/examples/jsm/helpers/TextureHelper.js +237 -0
  12. package/examples/jsm/interactive/HTMLMesh.js +9 -2
  13. package/examples/jsm/lines/LineMaterial.js +16 -33
  14. package/examples/jsm/loaders/ColladaLoader.js +0 -6
  15. package/examples/jsm/loaders/DRACOLoader.js +4 -3
  16. package/examples/jsm/loaders/FBXLoader.js +294 -124
  17. package/examples/jsm/loaders/GLTFLoader.js +71 -3
  18. package/examples/jsm/loaders/MaterialXLoader.js +73 -54
  19. package/examples/jsm/loaders/NRRDLoader.js +0 -13
  20. package/examples/jsm/loaders/SVGLoader.js +4 -4
  21. package/examples/jsm/loaders/USDZLoader.js +3 -17
  22. package/examples/jsm/math/Octree.js +15 -4
  23. package/examples/jsm/misc/Timer.js +119 -0
  24. package/examples/jsm/misc/TubePainter.js +3 -6
  25. package/examples/jsm/modifiers/CurveModifier.js +20 -2
  26. package/examples/jsm/nodes/Nodes.js +11 -7
  27. package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
  28. package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
  29. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
  30. package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
  31. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
  32. package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
  33. package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
  34. package/examples/jsm/nodes/accessors/TextureNode.js +122 -36
  35. package/examples/jsm/nodes/code/CodeNode.js +3 -3
  36. package/examples/jsm/nodes/core/AttributeNode.js +7 -1
  37. package/examples/jsm/nodes/core/CacheNode.js +4 -1
  38. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  39. package/examples/jsm/nodes/core/Node.js +6 -3
  40. package/examples/jsm/nodes/core/NodeBuilder.js +84 -27
  41. package/examples/jsm/nodes/core/NodeFrame.js +10 -8
  42. package/examples/jsm/nodes/core/NodeUniform.js +12 -0
  43. package/examples/jsm/nodes/core/NodeUtils.js +3 -7
  44. package/examples/jsm/nodes/core/OutputStructNode.js +3 -3
  45. package/examples/jsm/nodes/core/PropertyNode.js +17 -2
  46. package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
  47. package/examples/jsm/nodes/core/UniformGroup.js +13 -0
  48. package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
  49. package/examples/jsm/nodes/core/UniformNode.js +17 -0
  50. package/examples/jsm/nodes/core/VarNode.js +2 -0
  51. package/examples/jsm/nodes/core/VaryingNode.js +1 -7
  52. package/examples/jsm/nodes/display/BumpMapNode.js +1 -1
  53. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
  54. package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
  55. package/examples/jsm/nodes/display/PassNode.js +182 -0
  56. package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
  57. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
  58. package/examples/jsm/nodes/display/ViewportNode.js +5 -8
  59. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +1 -1
  60. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +52 -17
  61. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -12
  62. package/examples/jsm/nodes/lighting/LightsNode.js +34 -32
  63. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +1 -1
  64. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +12 -12
  65. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
  66. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +1 -1
  67. package/examples/jsm/nodes/materials/NodeMaterial.js +66 -41
  68. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
  69. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  70. package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
  71. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
  72. package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
  73. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
  74. package/examples/jsm/nodes/math/MathNode.js +2 -0
  75. package/examples/jsm/nodes/math/OperatorNode.js +19 -6
  76. package/examples/jsm/nodes/shadernode/ShaderNode.js +32 -3
  77. package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
  78. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  79. package/examples/jsm/nodes/utils/SplitNode.js +8 -2
  80. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
  81. package/examples/jsm/objects/QuadMesh.js +60 -0
  82. package/examples/jsm/postprocessing/GTAOPass.js +572 -0
  83. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  84. package/examples/jsm/renderers/common/Animation.js +10 -21
  85. package/examples/jsm/renderers/common/Backend.js +19 -3
  86. package/examples/jsm/renderers/common/Background.js +20 -22
  87. package/examples/jsm/renderers/common/Bindings.js +30 -21
  88. package/examples/jsm/renderers/common/ChainMap.js +3 -3
  89. package/examples/jsm/renderers/common/Color4.js +37 -0
  90. package/examples/jsm/renderers/common/Geometries.js +4 -4
  91. package/examples/jsm/renderers/common/Info.js +12 -2
  92. package/examples/jsm/renderers/common/Pipelines.js +3 -51
  93. package/examples/jsm/renderers/common/PostProcessing.js +25 -0
  94. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  95. package/examples/jsm/renderers/common/RenderContexts.js +1 -1
  96. package/examples/jsm/renderers/common/RenderObject.js +13 -1
  97. package/examples/jsm/renderers/common/RenderObjects.js +4 -2
  98. package/examples/jsm/renderers/common/Renderer.js +137 -37
  99. package/examples/jsm/renderers/common/StorageTexture.js +1 -0
  100. package/examples/jsm/renderers/common/Textures.js +4 -1
  101. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
  102. package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
  103. package/examples/jsm/renderers/common/nodes/Nodes.js +74 -7
  104. package/examples/jsm/renderers/webgl/WebGLBackend.js +91 -33
  105. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +100 -31
  106. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +57 -5
  107. package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
  108. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
  109. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
  110. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
  111. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  112. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
  113. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
  114. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +186 -137
  115. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
  116. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +209 -90
  117. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
  118. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
  119. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
  120. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
  121. package/examples/jsm/shaders/FXAAShader.js +133 -133
  122. package/examples/jsm/shaders/GTAOShader.js +424 -0
  123. package/examples/jsm/shaders/OutputShader.js +4 -0
  124. package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
  125. package/examples/jsm/shaders/SAOShader.js +2 -3
  126. package/examples/jsm/shaders/SSAOShader.js +2 -3
  127. package/examples/jsm/transpiler/AST.js +40 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +50 -8
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +4 -4
  130. package/examples/jsm/transpiler/TSLEncoder.js +124 -20
  131. package/examples/jsm/utils/SortUtils.js +158 -0
  132. package/examples/jsm/utils/TextureUtils.js +33 -21
  133. package/examples/jsm/webxr/ARButton.js +14 -0
  134. package/examples/jsm/webxr/VRButton.js +23 -8
  135. package/examples/jsm/webxr/XRButton.js +25 -11
  136. package/package.json +5 -6
  137. package/src/Three.js +1 -0
  138. package/src/constants.js +2 -1
  139. package/src/core/BufferAttribute.js +21 -2
  140. package/src/core/InterleavedBuffer.js +21 -1
  141. package/src/core/Object3D.js +60 -12
  142. package/src/core/UniformsGroup.js +7 -1
  143. package/src/extras/curves/LineCurve3.js +4 -0
  144. package/src/loaders/AudioLoader.js +1 -1
  145. package/src/loaders/BufferGeometryLoader.js +0 -7
  146. package/src/loaders/ImageBitmapLoader.js +25 -1
  147. package/src/loaders/ObjectLoader.js +49 -0
  148. package/src/materials/ShaderMaterial.js +2 -1
  149. package/src/math/ColorManagement.js +0 -16
  150. package/src/math/Quaternion.js +5 -4
  151. package/src/math/Sphere.js +2 -0
  152. package/src/math/Triangle.js +17 -5
  153. package/src/objects/BatchedMesh.js +1020 -0
  154. package/src/objects/Skeleton.js +1 -3
  155. package/src/renderers/WebGL3DRenderTarget.js +2 -2
  156. package/src/renderers/WebGLArrayRenderTarget.js +2 -2
  157. package/src/renderers/WebGLRenderer.js +24 -19
  158. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
  159. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
  160. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
  161. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
  162. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
  163. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
  164. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
  165. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
  166. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
  167. package/src/renderers/shaders/ShaderChunk.js +4 -0
  168. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  169. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  170. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
  171. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
  172. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
  173. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
  174. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
  175. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -0
  176. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
  177. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
  178. package/src/renderers/webgl/WebGLAttributes.js +39 -5
  179. package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
  180. package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
  181. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  182. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
  183. package/src/renderers/webgl/WebGLLights.js +11 -2
  184. package/src/renderers/webgl/WebGLProgram.js +20 -1
  185. package/src/renderers/webgl/WebGLPrograms.js +5 -0
  186. package/src/renderers/webgl/WebGLShadowMap.js +35 -0
  187. package/src/renderers/webgl/WebGLTextures.js +7 -11
  188. package/src/renderers/webgl/WebGLUniforms.js +11 -1
  189. package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
  190. package/src/renderers/webxr/WebXRManager.js +16 -0
  191. package/examples/jsm/objects/BatchedMesh.js +0 -586
@@ -0,0 +1,237 @@
1
+ import {
2
+ BoxGeometry,
3
+ BufferAttribute,
4
+ DoubleSide,
5
+ Mesh,
6
+ PlaneGeometry,
7
+ ShaderMaterial,
8
+ Vector3,
9
+ } from 'three';
10
+ import { mergeGeometries } from '../utils/BufferGeometryUtils.js';
11
+
12
+ class TextureHelper extends Mesh {
13
+
14
+ constructor( texture, width = 1, height = 1, depth = 1 ) {
15
+
16
+ const material = new ShaderMaterial( {
17
+
18
+ type: 'TextureHelperMaterial',
19
+
20
+ side: DoubleSide,
21
+ transparent: true,
22
+
23
+ uniforms: {
24
+
25
+ map: { value: texture },
26
+ alpha: { value: getAlpha( texture ) },
27
+
28
+ },
29
+
30
+ vertexShader: [
31
+
32
+ 'attribute vec3 uvw;',
33
+
34
+ 'varying vec3 vUvw;',
35
+
36
+ 'void main() {',
37
+
38
+ ' vUvw = uvw;',
39
+
40
+ ' gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',
41
+
42
+ '}',
43
+
44
+ ].join( '\n' ),
45
+
46
+ fragmentShader: [
47
+
48
+ 'precision highp float;',
49
+
50
+ 'precision highp sampler2DArray;',
51
+
52
+ 'precision highp sampler3D;',
53
+
54
+ 'uniform {samplerType} map;',
55
+
56
+ 'uniform float alpha;',
57
+
58
+ 'varying vec3 vUvw;',
59
+
60
+ 'vec4 textureHelper( in sampler2D map ) { return texture( map, vUvw.xy ); }',
61
+
62
+ 'vec4 textureHelper( in sampler2DArray map ) { return texture( map, vUvw ); }',
63
+
64
+ 'vec4 textureHelper( in sampler3D map ) { return texture( map, vUvw ); }',
65
+
66
+ 'vec4 textureHelper( in samplerCube map ) { return texture( map, vUvw ); }',
67
+
68
+ 'void main() {',
69
+
70
+ ' gl_FragColor = linearToOutputTexel( vec4( textureHelper( map ).xyz, alpha ) );',
71
+
72
+ '}'
73
+
74
+ ].join( '\n' ).replace( '{samplerType}', getSamplerType( texture ) )
75
+
76
+ } );
77
+
78
+ const geometry = texture.isCubeTexture
79
+ ? createCubeGeometry( width, height, depth )
80
+ : createSliceGeometry( texture, width, height, depth );
81
+
82
+ super( geometry, material );
83
+
84
+ this.texture = texture;
85
+ this.type = 'TextureHelper';
86
+
87
+ }
88
+
89
+ dispose() {
90
+
91
+ this.geometry.dispose();
92
+ this.material.dispose();
93
+
94
+ }
95
+
96
+ }
97
+
98
+ function getSamplerType( texture ) {
99
+
100
+ if ( texture.isCubeTexture ) {
101
+
102
+ return 'samplerCube';
103
+
104
+ } else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {
105
+
106
+ return 'sampler2DArray';
107
+
108
+ } else if ( texture.isData3DTexture || texture.isCompressed3DTexture ) {
109
+
110
+ return 'sampler3D';
111
+
112
+ } else {
113
+
114
+ return 'sampler2D';
115
+
116
+ }
117
+
118
+ }
119
+
120
+ function getImageCount( texture ) {
121
+
122
+ if ( texture.isCubeTexture ) {
123
+
124
+ return 6;
125
+
126
+ } else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {
127
+
128
+ return texture.image.depth;
129
+
130
+ } else if ( texture.isData3DTexture || texture.isCompressed3DTexture ) {
131
+
132
+ return texture.image.depth;
133
+
134
+ } else {
135
+
136
+ return 1;
137
+
138
+ }
139
+
140
+ }
141
+
142
+ function getAlpha( texture ) {
143
+
144
+ if ( texture.isCubeTexture ) {
145
+
146
+ return 1;
147
+
148
+ } else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {
149
+
150
+ return Math.max( 1 / texture.image.depth, 0.25 );
151
+
152
+ } else if ( texture.isData3DTexture || texture.isCompressed3DTexture ) {
153
+
154
+ return Math.max( 1 / texture.image.depth, 0.25 );
155
+
156
+ } else {
157
+
158
+ return 1;
159
+
160
+ }
161
+
162
+ }
163
+
164
+ function createCubeGeometry( width, height, depth ) {
165
+
166
+ const geometry = new BoxGeometry( width, height, depth );
167
+
168
+ const position = geometry.attributes.position;
169
+ const uv = geometry.attributes.uv;
170
+ const uvw = new BufferAttribute( new Float32Array( uv.count * 3 ), 3 );
171
+
172
+ const _direction = new Vector3();
173
+
174
+ for ( let j = 0, jl = uv.count; j < jl; ++ j ) {
175
+
176
+ _direction.fromBufferAttribute( position, j ).normalize();
177
+
178
+ const u = _direction.x;
179
+ const v = _direction.y;
180
+ const w = _direction.z;
181
+
182
+ uvw.setXYZ( j, u, v, w );
183
+
184
+ }
185
+
186
+ geometry.deleteAttribute( 'uv' );
187
+ geometry.setAttribute( 'uvw', uvw );
188
+
189
+ return geometry;
190
+
191
+ }
192
+
193
+ function createSliceGeometry( texture, width, height, depth ) {
194
+
195
+ const sliceCount = getImageCount( texture );
196
+
197
+ const geometries = [];
198
+
199
+ for ( let i = 0; i < sliceCount; ++ i ) {
200
+
201
+ const geometry = new PlaneGeometry( width, height );
202
+
203
+ if ( sliceCount > 1 ) {
204
+
205
+ geometry.translate( 0, 0, depth * ( i / ( sliceCount - 1 ) - 0.5 ) );
206
+
207
+ }
208
+
209
+ const uv = geometry.attributes.uv;
210
+ const uvw = new BufferAttribute( new Float32Array( uv.count * 3 ), 3 );
211
+
212
+ for ( let j = 0, jl = uv.count; j < jl; ++ j ) {
213
+
214
+ const u = uv.getX( j );
215
+ const v = texture.flipY ? uv.getY( j ) : 1 - uv.getY( j );
216
+ const w = sliceCount === 1
217
+ ? 1
218
+ : texture.isDataArrayTexture || texture.isCompressedArrayTexture
219
+ ? i
220
+ : i / ( sliceCount - 1 );
221
+
222
+ uvw.setXYZ( j, u, v, w );
223
+
224
+ }
225
+
226
+ geometry.deleteAttribute( 'uv' );
227
+ geometry.setAttribute( 'uvw', uvw );
228
+
229
+ geometries.push( geometry );
230
+
231
+ }
232
+
233
+ return mergeGeometries( geometries );
234
+
235
+ }
236
+
237
+ export { TextureHelper };
@@ -267,10 +267,15 @@ function html2canvas( element ) {
267
267
  // Canvas element
268
268
  if ( element.style.display === 'none' ) return;
269
269
 
270
- context.save();
270
+ const rect = element.getBoundingClientRect();
271
+
272
+ x = rect.left - offset.left - 0.5;
273
+ y = rect.top - offset.top - 0.5;
274
+
275
+ context.save();
271
276
  const dpr = window.devicePixelRatio;
272
277
  context.scale( 1 / dpr, 1 / dpr );
273
- context.drawImage( element, 0, 0 );
278
+ context.drawImage( element, x, y );
274
279
  context.restore();
275
280
 
276
281
  } else if ( element instanceof HTMLImageElement ) {
@@ -501,6 +506,8 @@ function html2canvas( element ) {
501
506
 
502
507
  // console.time( 'drawElement' );
503
508
 
509
+ context.clearRect( 0, 0, canvas.width, canvas.height );
510
+
504
511
  drawElement( element );
505
512
 
506
513
  // console.timeEnd( 'drawElement' );
@@ -169,51 +169,34 @@ ShaderLib[ 'line' ] = {
169
169
 
170
170
  #ifdef WORLD_UNITS
171
171
 
172
- // get the offset direction as perpendicular to the view vector
173
172
  vec3 worldDir = normalize( end.xyz - start.xyz );
174
- vec3 offset;
175
- if ( position.y < 0.5 ) {
173
+ vec3 tmpFwd = normalize( mix( start.xyz, end.xyz, 0.5 ) );
174
+ vec3 worldUp = normalize( cross( worldDir, tmpFwd ) );
175
+ vec3 worldFwd = cross( worldDir, worldUp );
176
+ worldPos = position.y < 0.5 ? start: end;
176
177
 
177
- offset = normalize( cross( start.xyz, worldDir ) );
178
-
179
- } else {
180
-
181
- offset = normalize( cross( end.xyz, worldDir ) );
182
-
183
- }
184
-
185
- // sign flip
186
- if ( position.x < 0.0 ) offset *= - 1.0;
187
-
188
- float forwardOffset = dot( worldDir, vec3( 0.0, 0.0, 1.0 ) );
178
+ // height offset
179
+ float hw = linewidth * 0.5;
180
+ worldPos.xyz += position.x < 0.0 ? hw * worldUp : - hw * worldUp;
189
181
 
190
182
  // don't extend the line if we're rendering dashes because we
191
183
  // won't be rendering the endcaps
192
184
  #ifndef USE_DASH
193
185
 
194
- // extend the line bounds to encompass endcaps
195
- start.xyz += - worldDir * linewidth * 0.5;
196
- end.xyz += worldDir * linewidth * 0.5;
186
+ // cap extension
187
+ worldPos.xyz += position.y < 0.5 ? - hw * worldDir : hw * worldDir;
197
188
 
198
- // shift the position of the quad so it hugs the forward edge of the line
199
- offset.xy -= dir * forwardOffset;
200
- offset.z += 0.5;
189
+ // add width to the box
190
+ worldPos.xyz += worldFwd * hw;
201
191
 
202
- #endif
203
-
204
- // endcaps
205
- if ( position.y > 1.0 || position.y < 0.0 ) {
206
-
207
- offset.xy += dir * 2.0 * forwardOffset;
192
+ // endcaps
193
+ if ( position.y > 1.0 || position.y < 0.0 ) {
208
194
 
209
- }
195
+ worldPos.xyz -= worldFwd * 2.0 * hw;
210
196
 
211
- // adjust for linewidth
212
- offset *= linewidth * 0.5;
197
+ }
213
198
 
214
- // set the world position
215
- worldPos = ( position.y < 0.5 ) ? start : end;
216
- worldPos.xyz += offset;
199
+ #endif
217
200
 
218
201
  // project the worldpos
219
202
  vec4 clip = projectionMatrix * worldPos;
@@ -42,12 +42,6 @@ import { TGALoader } from '../loaders/TGALoader.js';
42
42
 
43
43
  class ColladaLoader extends Loader {
44
44
 
45
- constructor( manager ) {
46
-
47
- super( manager );
48
-
49
- }
50
-
51
45
  load( url, onLoad, onProgress, onError ) {
52
46
 
53
47
  const scope = this;
@@ -82,13 +82,14 @@ class DRACOLoader extends Loader {
82
82
 
83
83
  }
84
84
 
85
- parse( buffer, onLoad, onError ) {
85
+
86
+ parse( buffer, onLoad, onError = ()=>{} ) {
86
87
 
87
88
  this.decodeDracoFile( buffer, onLoad, null, null, SRGBColorSpace ).catch( onError );
88
89
 
89
90
  }
90
91
 
91
- decodeDracoFile( buffer, callback, attributeIDs, attributeTypes, vertexColorSpace = LinearSRGBColorSpace ) {
92
+ decodeDracoFile( buffer, callback, attributeIDs, attributeTypes, vertexColorSpace = LinearSRGBColorSpace, onError = () => {} ) {
92
93
 
93
94
  const taskConfig = {
94
95
  attributeIDs: attributeIDs || this.defaultAttributeIDs,
@@ -97,7 +98,7 @@ class DRACOLoader extends Loader {
97
98
  vertexColorSpace: vertexColorSpace,
98
99
  };
99
100
 
100
- return this.decodeGeometry( buffer, taskConfig ).then( callback );
101
+ return this.decodeGeometry( buffer, taskConfig ).then( callback ).catch( onError );
101
102
 
102
103
  }
103
104