super-three 0.162.0 → 0.164.0
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.
- package/build/three.cjs +847 -1226
- package/build/three.module.js +846 -1225
- package/build/three.module.min.js +2 -2
- package/examples/jsm/animation/CCDIKSolver.js +4 -2
- package/examples/jsm/controls/TransformControls.js +3 -3
- package/examples/jsm/exporters/GLTFExporter.js +66 -5
- package/examples/jsm/exporters/USDZExporter.js +22 -1
- package/examples/jsm/geometries/TextGeometry.js +10 -2
- package/examples/jsm/interactive/HTMLMesh.js +7 -9
- package/examples/jsm/libs/draco/README.md +2 -2
- package/examples/jsm/libs/fflate.module.js +694 -496
- package/examples/jsm/lines/LineMaterial.js +0 -2
- package/examples/jsm/loaders/3MFLoader.js +2 -0
- package/examples/jsm/loaders/EXRLoader.js +351 -97
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +59 -0
- package/examples/jsm/loaders/KTX2Loader.js +3 -10
- package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
- package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
- package/examples/jsm/loaders/LUTImageLoader.js +0 -14
- package/examples/jsm/loaders/RGBMLoader.js +16 -0
- package/examples/jsm/loaders/VRMLLoader.js +1 -1
- package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
- package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
- package/examples/jsm/math/Octree.js +26 -20
- package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
- package/examples/jsm/nodes/Nodes.js +10 -4
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +16 -1
- package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
- package/examples/jsm/nodes/accessors/ClippingNode.js +3 -2
- package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
- package/examples/jsm/nodes/accessors/MaterialNode.js +107 -3
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/MorphNode.js +13 -3
- package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +9 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +51 -10
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionNode.js +0 -8
- package/examples/jsm/nodes/core/Node.js +63 -4
- package/examples/jsm/nodes/core/NodeBuilder.js +26 -25
- package/examples/jsm/nodes/core/NodeFrame.js +10 -10
- package/examples/jsm/nodes/core/NodeUtils.js +2 -2
- package/examples/jsm/nodes/core/OutputStructNode.js +2 -1
- package/examples/jsm/nodes/core/PropertyNode.js +10 -0
- package/examples/jsm/nodes/core/UniformNode.js +20 -0
- package/examples/jsm/nodes/display/BumpMapNode.js +7 -26
- package/examples/jsm/nodes/display/FrontFacingNode.js +13 -0
- package/examples/jsm/nodes/display/PassNode.js +17 -1
- package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
- package/examples/jsm/nodes/display/ViewportDepthNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportNode.js +4 -2
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
- package/examples/jsm/nodes/display/ViewportTextureNode.js +4 -1
- package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
- package/examples/jsm/nodes/fog/FogNode.js +13 -3
- package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +26 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -3
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
- package/examples/jsm/nodes/functions/PhongLightingModel.js +1 -1
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +164 -10
- package/examples/jsm/nodes/functions/ShadowMaskModel.js +31 -0
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +19 -5
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +22 -70
- package/examples/jsm/nodes/lighting/IrradianceNode.js +24 -0
- package/examples/jsm/nodes/lighting/LightsNode.js +11 -1
- package/examples/jsm/nodes/lighting/PointLightNode.js +2 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +2 -1
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +10 -6
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -2
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +76 -5
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +11 -4
- package/examples/jsm/nodes/materials/NodeMaterial.js +55 -43
- package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +34 -0
- package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
- package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
- package/examples/jsm/nodes/shadernode/ShaderNode.js +3 -9
- package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
- package/examples/jsm/objects/QuadMesh.js +7 -23
- package/examples/jsm/physics/JoltPhysics.js +281 -0
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/GlitchPass.js +0 -3
- package/examples/jsm/postprocessing/LUTPass.js +5 -71
- package/examples/jsm/postprocessing/RenderTransitionPass.js +193 -0
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SSAOPass.js +0 -3
- package/examples/jsm/renderers/common/Animation.js +3 -0
- package/examples/jsm/renderers/common/Background.js +8 -8
- package/examples/jsm/renderers/common/ClippingContext.js +1 -1
- package/examples/jsm/renderers/common/Info.js +11 -19
- package/examples/jsm/renderers/common/PostProcessing.js +12 -4
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderList.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +47 -5
- package/examples/jsm/renderers/common/RenderObjects.js +1 -1
- package/examples/jsm/renderers/common/Renderer.js +153 -21
- package/examples/jsm/renderers/common/Textures.js +1 -1
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +773 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +34 -63
- package/examples/jsm/renderers/webgl/WebGLBackend.js +146 -36
- package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +145 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +9 -3
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +1 -1
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +64 -7
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +6 -23
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +77 -60
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +29 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +92 -18
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
- package/examples/jsm/utils/GPUStatsPanel.js +10 -45
- package/examples/jsm/utils/SceneUtils.js +60 -1
- package/examples/jsm/utils/TextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
- package/package.json +1 -1
- package/src/Three.js +0 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/constants.js +3 -3
- package/src/core/Object3D.js +10 -7
- package/src/core/RenderTarget.js +8 -0
- package/src/extras/PMREMGenerator.js +21 -11
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/MaterialLoader.js +1 -0
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshPhysicalMaterial.js +20 -0
- package/src/materials/ShaderMaterial.js +0 -4
- package/src/math/Spherical.js +4 -5
- package/src/objects/BatchedMesh.js +27 -3
- package/src/objects/InstancedMesh.js +10 -0
- package/src/objects/Line.js +66 -43
- package/src/renderers/WebGLRenderer.js +130 -158
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +17 -9
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib.js +2 -1
- package/src/renderers/shaders/UniformsUtils.js +10 -1
- package/src/renderers/webgl/WebGLAttributes.js +6 -33
- package/src/renderers/webgl/WebGLBackground.js +18 -3
- package/src/renderers/webgl/WebGLBindingStates.js +14 -51
- package/src/renderers/webgl/WebGLBufferRenderer.js +35 -21
- package/src/renderers/webgl/WebGLCapabilities.js +35 -13
- package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
- package/src/renderers/webgl/WebGLExtensions.js +4 -19
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +35 -21
- package/src/renderers/webgl/WebGLLights.js +6 -32
- package/src/renderers/webgl/WebGLMaterials.js +8 -3
- package/src/renderers/webgl/WebGLMorphtargets.js +79 -217
- package/src/renderers/webgl/WebGLProgram.js +21 -52
- package/src/renderers/webgl/WebGLPrograms.js +24 -31
- package/src/renderers/webgl/WebGLRenderStates.js +13 -7
- package/src/renderers/webgl/WebGLShadowMap.js +25 -25
- package/src/renderers/webgl/WebGLState.js +15 -59
- package/src/renderers/webgl/WebGLTextures.js +138 -292
- package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
- package/src/renderers/webgl/WebGLUtils.js +9 -78
- package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
- package/src/renderers/webxr/WebXRManager.js +4 -6
- package/src/scenes/Scene.js +7 -1
- package/src/textures/Texture.js +11 -1
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -320
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -794
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
- package/src/renderers/WebGL1Renderer.js +0 -7
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
|
@@ -68,6 +68,7 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
|
|
|
68
68
|
|
|
69
69
|
this._anisotropy = 0;
|
|
70
70
|
this._clearcoat = 0;
|
|
71
|
+
this._dispersion = 0;
|
|
71
72
|
this._iridescence = 0;
|
|
72
73
|
this._sheen = 0.0;
|
|
73
74
|
this._transmission = 0;
|
|
@@ -130,6 +131,24 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
|
|
|
130
131
|
|
|
131
132
|
}
|
|
132
133
|
|
|
134
|
+
get dispersion() {
|
|
135
|
+
|
|
136
|
+
return this._dispersion;
|
|
137
|
+
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
set dispersion( value ) {
|
|
141
|
+
|
|
142
|
+
if ( this._dispersion > 0 !== value > 0 ) {
|
|
143
|
+
|
|
144
|
+
this.version ++;
|
|
145
|
+
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
this._dispersion = value;
|
|
149
|
+
|
|
150
|
+
}
|
|
151
|
+
|
|
133
152
|
get sheen() {
|
|
134
153
|
|
|
135
154
|
return this._sheen;
|
|
@@ -188,6 +207,7 @@ class MeshPhysicalMaterial extends MeshStandardMaterial {
|
|
|
188
207
|
this.clearcoatNormalMap = source.clearcoatNormalMap;
|
|
189
208
|
this.clearcoatNormalScale.copy( source.clearcoatNormalScale );
|
|
190
209
|
|
|
210
|
+
this.dispersion = source.dispersion;
|
|
191
211
|
this.ior = source.ior;
|
|
192
212
|
|
|
193
213
|
this.iridescence = source.iridescence;
|
|
@@ -33,10 +33,6 @@ class ShaderMaterial extends Material {
|
|
|
33
33
|
this.forceSinglePass = true;
|
|
34
34
|
|
|
35
35
|
this.extensions = {
|
|
36
|
-
derivatives: false, // set to use derivatives
|
|
37
|
-
fragDepth: false, // set to use fragment depth values
|
|
38
|
-
drawBuffers: false, // set to use draw buffers
|
|
39
|
-
shaderTextureLOD: false, // set to use shader texture LOD
|
|
40
36
|
clipCullDistance: false, // set to use vertex shader clipping
|
|
41
37
|
multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
|
|
42
38
|
};
|
package/src/math/Spherical.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
+
import * as MathUtils from './MathUtils.js';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system
|
|
3
5
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
+
* phi (the polar angle) is measured from the positive y-axis. The positive y-axis is up.
|
|
7
|
+
* theta (the azimuthal angle) is measured from the positive z-axis.
|
|
6
8
|
*/
|
|
7
|
-
|
|
8
|
-
import * as MathUtils from './MathUtils.js';
|
|
9
|
-
|
|
10
9
|
class Spherical {
|
|
11
10
|
|
|
12
11
|
constructor( radius = 1, phi = 0, theta = 0 ) {
|
|
@@ -152,6 +152,7 @@ class BatchedMesh extends Mesh {
|
|
|
152
152
|
this._multiDrawCounts = new Int32Array( maxGeometryCount );
|
|
153
153
|
this._multiDrawStarts = new Int32Array( maxGeometryCount );
|
|
154
154
|
this._multiDrawCount = 0;
|
|
155
|
+
this._multiDrawInstances = null;
|
|
155
156
|
this._visibilityChanged = true;
|
|
156
157
|
|
|
157
158
|
// Local matrix per geometry by using data texture
|
|
@@ -195,8 +196,7 @@ class BatchedMesh extends Mesh {
|
|
|
195
196
|
const { array, itemSize, normalized } = srcAttribute;
|
|
196
197
|
|
|
197
198
|
const dstArray = new array.constructor( maxVertexCount * itemSize );
|
|
198
|
-
const dstAttribute = new
|
|
199
|
-
dstAttribute.setUsage( srcAttribute.usage );
|
|
199
|
+
const dstAttribute = new BufferAttribute( dstArray, itemSize, normalized );
|
|
200
200
|
|
|
201
201
|
geometry.setAttribute( attributeName, dstAttribute );
|
|
202
202
|
|
|
@@ -223,7 +223,7 @@ class BatchedMesh extends Mesh {
|
|
|
223
223
|
|
|
224
224
|
}
|
|
225
225
|
|
|
226
|
-
// Make sure the geometry is compatible with the existing combined geometry
|
|
226
|
+
// Make sure the geometry is compatible with the existing combined geometry attributes
|
|
227
227
|
_validateGeometry( geometry ) {
|
|
228
228
|
|
|
229
229
|
// check that the geometry doesn't have a version of our reserved id attribute
|
|
@@ -514,6 +514,7 @@ class BatchedMesh extends Mesh {
|
|
|
514
514
|
}
|
|
515
515
|
|
|
516
516
|
dstAttribute.needsUpdate = true;
|
|
517
|
+
dstAttribute.addUpdateRange( vertexStart * itemSize, vertexCount * itemSize );
|
|
517
518
|
|
|
518
519
|
}
|
|
519
520
|
|
|
@@ -537,6 +538,7 @@ class BatchedMesh extends Mesh {
|
|
|
537
538
|
}
|
|
538
539
|
|
|
539
540
|
dstIndex.needsUpdate = true;
|
|
541
|
+
dstIndex.addUpdateRange( indexStart, reservedRange.indexCount );
|
|
540
542
|
|
|
541
543
|
}
|
|
542
544
|
|
|
@@ -592,6 +594,28 @@ class BatchedMesh extends Mesh {
|
|
|
592
594
|
|
|
593
595
|
}
|
|
594
596
|
|
|
597
|
+
getInstanceCountAt( id ) {
|
|
598
|
+
|
|
599
|
+
if ( this._multiDrawInstances === null ) return null;
|
|
600
|
+
|
|
601
|
+
return this._multiDrawInstances[ id ];
|
|
602
|
+
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
setInstanceCountAt( id, instanceCount ) {
|
|
606
|
+
|
|
607
|
+
if ( this._multiDrawInstances === null ) {
|
|
608
|
+
|
|
609
|
+
this._multiDrawInstances = new Int32Array( this._maxGeometryCount ).fill( 1 );
|
|
610
|
+
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
this._multiDrawInstances[ id ] = instanceCount;
|
|
614
|
+
|
|
615
|
+
return id;
|
|
616
|
+
|
|
617
|
+
}
|
|
618
|
+
|
|
595
619
|
// get bounding box and compute it if it doesn't exist
|
|
596
620
|
getBoundingBoxAt( id, target ) {
|
|
597
621
|
|
|
@@ -109,6 +109,7 @@ class InstancedMesh extends Mesh {
|
|
|
109
109
|
|
|
110
110
|
this.instanceMatrix.copy( source.instanceMatrix );
|
|
111
111
|
|
|
112
|
+
if ( source.morphTexture !== null ) this.morphTexture = source.morphTexture.clone();
|
|
112
113
|
if ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();
|
|
113
114
|
|
|
114
115
|
this.count = source.count;
|
|
@@ -260,6 +261,15 @@ class InstancedMesh extends Mesh {
|
|
|
260
261
|
|
|
261
262
|
this.dispatchEvent( { type: 'dispose' } );
|
|
262
263
|
|
|
264
|
+
if ( this.morphTexture !== null ) {
|
|
265
|
+
|
|
266
|
+
this.morphTexture.dispose();
|
|
267
|
+
this.morphTexture = null;
|
|
268
|
+
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
return this;
|
|
272
|
+
|
|
263
273
|
}
|
|
264
274
|
|
|
265
275
|
}
|
package/src/objects/Line.js
CHANGED
|
@@ -7,12 +7,16 @@ import { LineBasicMaterial } from '../materials/LineBasicMaterial.js';
|
|
|
7
7
|
import { BufferGeometry } from '../core/BufferGeometry.js';
|
|
8
8
|
import { Float32BufferAttribute } from '../core/BufferAttribute.js';
|
|
9
9
|
|
|
10
|
-
const
|
|
11
|
-
const
|
|
10
|
+
const _vStart = /*@__PURE__*/ new Vector3();
|
|
11
|
+
const _vEnd = /*@__PURE__*/ new Vector3();
|
|
12
|
+
|
|
12
13
|
const _inverseMatrix = /*@__PURE__*/ new Matrix4();
|
|
13
14
|
const _ray = /*@__PURE__*/ new Ray();
|
|
14
15
|
const _sphere = /*@__PURE__*/ new Sphere();
|
|
15
16
|
|
|
17
|
+
const _intersectPointOnRay = /*@__PURE__*/ new Vector3();
|
|
18
|
+
const _intersectPointOnSegment = /*@__PURE__*/ new Vector3();
|
|
19
|
+
|
|
16
20
|
class Line extends Object3D {
|
|
17
21
|
|
|
18
22
|
constructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {
|
|
@@ -54,11 +58,11 @@ class Line extends Object3D {
|
|
|
54
58
|
|
|
55
59
|
for ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {
|
|
56
60
|
|
|
57
|
-
|
|
58
|
-
|
|
61
|
+
_vStart.fromBufferAttribute( positionAttribute, i - 1 );
|
|
62
|
+
_vEnd.fromBufferAttribute( positionAttribute, i );
|
|
59
63
|
|
|
60
64
|
lineDistances[ i ] = lineDistances[ i - 1 ];
|
|
61
|
-
lineDistances[ i ] +=
|
|
65
|
+
lineDistances[ i ] += _vStart.distanceTo( _vEnd );
|
|
62
66
|
|
|
63
67
|
}
|
|
64
68
|
|
|
@@ -99,10 +103,6 @@ class Line extends Object3D {
|
|
|
99
103
|
const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );
|
|
100
104
|
const localThresholdSq = localThreshold * localThreshold;
|
|
101
105
|
|
|
102
|
-
const vStart = new Vector3();
|
|
103
|
-
const vEnd = new Vector3();
|
|
104
|
-
const interSegment = new Vector3();
|
|
105
|
-
const interRay = new Vector3();
|
|
106
106
|
const step = this.isLineSegments ? 2 : 1;
|
|
107
107
|
|
|
108
108
|
const index = geometry.index;
|
|
@@ -119,31 +119,28 @@ class Line extends Object3D {
|
|
|
119
119
|
const a = index.getX( i );
|
|
120
120
|
const b = index.getX( i + 1 );
|
|
121
121
|
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
const intersect = checkIntersection( this, raycaster, _ray, localThresholdSq, a, b );
|
|
123
|
+
|
|
124
|
+
if ( intersect ) {
|
|
124
125
|
|
|
125
|
-
|
|
126
|
+
intersects.push( intersect );
|
|
126
127
|
|
|
127
|
-
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
}
|
|
128
131
|
|
|
129
|
-
|
|
132
|
+
if ( this.isLineLoop ) {
|
|
130
133
|
|
|
131
|
-
const
|
|
134
|
+
const a = index.getX( end - 1 );
|
|
135
|
+
const b = index.getX( start );
|
|
132
136
|
|
|
133
|
-
|
|
137
|
+
const intersect = checkIntersection( this, raycaster, _ray, localThresholdSq, a, b );
|
|
134
138
|
|
|
135
|
-
|
|
139
|
+
if ( intersect ) {
|
|
136
140
|
|
|
137
|
-
|
|
138
|
-
// What do we want? intersection point on the ray or on the segment??
|
|
139
|
-
// point: raycaster.ray.at( distance ),
|
|
140
|
-
point: interSegment.clone().applyMatrix4( this.matrixWorld ),
|
|
141
|
-
index: i,
|
|
142
|
-
face: null,
|
|
143
|
-
faceIndex: null,
|
|
144
|
-
object: this
|
|
141
|
+
intersects.push( intersect );
|
|
145
142
|
|
|
146
|
-
}
|
|
143
|
+
}
|
|
147
144
|
|
|
148
145
|
}
|
|
149
146
|
|
|
@@ -154,31 +151,25 @@ class Line extends Object3D {
|
|
|
154
151
|
|
|
155
152
|
for ( let i = start, l = end - 1; i < l; i += step ) {
|
|
156
153
|
|
|
157
|
-
|
|
158
|
-
|
|
154
|
+
const intersect = checkIntersection( this, raycaster, _ray, localThresholdSq, i, i + 1 );
|
|
155
|
+
|
|
156
|
+
if ( intersect ) {
|
|
159
157
|
|
|
160
|
-
|
|
158
|
+
intersects.push( intersect );
|
|
161
159
|
|
|
162
|
-
|
|
160
|
+
}
|
|
163
161
|
|
|
164
|
-
|
|
162
|
+
}
|
|
165
163
|
|
|
166
|
-
|
|
164
|
+
if ( this.isLineLoop ) {
|
|
167
165
|
|
|
168
|
-
|
|
166
|
+
const intersect = checkIntersection( this, raycaster, _ray, localThresholdSq, end - 1, start );
|
|
169
167
|
|
|
170
|
-
|
|
168
|
+
if ( intersect ) {
|
|
171
169
|
|
|
172
|
-
|
|
173
|
-
// What do we want? intersection point on the ray or on the segment??
|
|
174
|
-
// point: raycaster.ray.at( distance ),
|
|
175
|
-
point: interSegment.clone().applyMatrix4( this.matrixWorld ),
|
|
176
|
-
index: i,
|
|
177
|
-
face: null,
|
|
178
|
-
faceIndex: null,
|
|
179
|
-
object: this
|
|
170
|
+
intersects.push( intersect );
|
|
180
171
|
|
|
181
|
-
}
|
|
172
|
+
}
|
|
182
173
|
|
|
183
174
|
}
|
|
184
175
|
|
|
@@ -219,4 +210,36 @@ class Line extends Object3D {
|
|
|
219
210
|
|
|
220
211
|
}
|
|
221
212
|
|
|
213
|
+
function checkIntersection( object, raycaster, ray, thresholdSq, a, b ) {
|
|
214
|
+
|
|
215
|
+
const positionAttribute = object.geometry.attributes.position;
|
|
216
|
+
|
|
217
|
+
_vStart.fromBufferAttribute( positionAttribute, a );
|
|
218
|
+
_vEnd.fromBufferAttribute( positionAttribute, b );
|
|
219
|
+
|
|
220
|
+
const distSq = ray.distanceSqToSegment( _vStart, _vEnd, _intersectPointOnRay, _intersectPointOnSegment );
|
|
221
|
+
|
|
222
|
+
if ( distSq > thresholdSq ) return;
|
|
223
|
+
|
|
224
|
+
_intersectPointOnRay.applyMatrix4( object.matrixWorld ); // Move back to world space for distance calculation
|
|
225
|
+
|
|
226
|
+
const distance = raycaster.ray.origin.distanceTo( _intersectPointOnRay );
|
|
227
|
+
|
|
228
|
+
if ( distance < raycaster.near || distance > raycaster.far ) return;
|
|
229
|
+
|
|
230
|
+
return {
|
|
231
|
+
|
|
232
|
+
distance: distance,
|
|
233
|
+
// What do we want? intersection point on the ray or on the segment??
|
|
234
|
+
// point: raycaster.ray.at( distance ),
|
|
235
|
+
point: _intersectPointOnSegment.clone().applyMatrix4( object.matrixWorld ),
|
|
236
|
+
index: a,
|
|
237
|
+
face: null,
|
|
238
|
+
faceIndex: null,
|
|
239
|
+
object: object
|
|
240
|
+
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
}
|
|
244
|
+
|
|
222
245
|
export { Line };
|