three-stdlib 2.14.1 → 2.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. package/csm/CSM.cjs.js +1 -1
  2. package/csm/CSM.js +8 -8
  3. package/csm/CSMFrustum.cjs.js +1 -0
  4. package/csm/CSMFrustum.d.ts +19 -0
  5. package/csm/{Frustum.js → CSMFrustum.js} +8 -7
  6. package/csm/CSMShader.cjs.js +1 -0
  7. package/csm/CSMShader.d.ts +4 -0
  8. package/csm/{Shader.js → CSMShader.js} +52 -36
  9. package/curves/CurveExtras.d.ts +52 -54
  10. package/geometries/ParametricGeometries.cjs.js +1 -1
  11. package/geometries/ParametricGeometries.js +91 -99
  12. package/geometries/ParametricGeometry.cjs.js +1 -0
  13. package/geometries/ParametricGeometry.d.ts +18 -0
  14. package/geometries/ParametricGeometry.js +87 -0
  15. package/index.cjs.js +1 -1
  16. package/index.d.ts +3 -77
  17. package/index.js +4 -1
  18. package/interactive/InteractiveGroup.cjs.js +1 -0
  19. package/interactive/InteractiveGroup.d.ts +5 -0
  20. package/interactive/InteractiveGroup.js +87 -0
  21. package/lines/Line2.cjs.js +1 -1
  22. package/lines/Line2.d.ts +7 -5
  23. package/lines/Line2.js +2 -5
  24. package/lines/LineGeometry.cjs.js +1 -1
  25. package/lines/LineGeometry.d.ts +6 -8
  26. package/lines/LineGeometry.js +28 -39
  27. package/lines/LineMaterial.cjs.js +1 -1
  28. package/lines/LineMaterial.d.ts +23 -19
  29. package/lines/LineMaterial.js +263 -107
  30. package/lines/LineSegments2.cjs.js +1 -1
  31. package/lines/LineSegments2.d.ts +12 -20
  32. package/lines/LineSegments2.js +272 -125
  33. package/lines/LineSegmentsGeometry.cjs.js +1 -1
  34. package/lines/LineSegmentsGeometry.d.ts +18 -16
  35. package/lines/LineSegmentsGeometry.js +30 -40
  36. package/lines/Wireframe.cjs.js +1 -1
  37. package/lines/Wireframe.js +39 -39
  38. package/lines/WireframeGeometry2.cjs.js +1 -1
  39. package/lines/WireframeGeometry2.js +8 -9
  40. package/loaders/GLTFLoader.d.ts +2 -9
  41. package/loaders/LUT3dlLoader.d.ts +2 -2
  42. package/loaders/LUTCubeLoader.d.ts +2 -2
  43. package/loaders/RGBELoader.cjs.js +1 -1
  44. package/loaders/RGBELoader.js +1 -9
  45. package/loaders/VOXLoader.d.ts +2 -2
  46. package/objects/Reflector.d.ts +1 -0
  47. package/objects/ReflectorForSSRPass.d.ts +4 -4
  48. package/objects/Refractor.d.ts +1 -0
  49. package/objects/Water2.d.ts +1 -1
  50. package/package.json +2 -1
  51. package/postprocessing/LUTPass.d.ts +3 -3
  52. package/postprocessing/SSAARenderPass.d.ts +1 -1
  53. package/postprocessing/SSRPass.d.ts +3 -3
  54. package/shaders/BokehShader2.d.ts +27 -72
  55. package/shaders/BokehShader2.js +0 -1
  56. package/shaders/index.cjs.js +1 -1
  57. package/shaders/index.d.ts +2 -1
  58. package/shaders/index.js +1 -1
  59. package/csm/Frustum.cjs.js +0 -1
  60. package/csm/Shader.cjs.js +0 -1
  61. package/loaders/VRMLoader.d.ts +0 -19
  62. package/nodes/Nodes.d.ts +0 -106
  63. package/nodes/accessors/CameraNode.d.ts +0 -29
  64. package/nodes/accessors/NormalNode.d.ts +0 -13
  65. package/nodes/accessors/PositionNode.d.ts +0 -15
  66. package/nodes/accessors/ReflectNode.d.ts +0 -12
  67. package/nodes/accessors/UVNode.d.ts +0 -10
  68. package/nodes/core/AttributeNode.d.ts +0 -13
  69. package/nodes/core/ConstNode.d.ts +0 -22
  70. package/nodes/core/ExpressionNode.d.ts +0 -5
  71. package/nodes/core/FunctionCallNode.d.ts +0 -17
  72. package/nodes/core/FunctionNode.d.ts +0 -28
  73. package/nodes/core/InputNode.d.ts +0 -12
  74. package/nodes/core/Node.d.ts +0 -34
  75. package/nodes/core/NodeBuilder.d.ts +0 -149
  76. package/nodes/core/NodeFrame.d.ts +0 -17
  77. package/nodes/core/NodeUniform.d.ts +0 -17
  78. package/nodes/core/NodeUtils.d.ts +0 -7
  79. package/nodes/core/TempNode.d.ts +0 -23
  80. package/nodes/core/VarNode.d.ts +0 -12
  81. package/nodes/materials/MeshStandardNodeMaterial.d.ts +0 -21
  82. package/nodes/materials/NodeMaterial.d.ts +0 -28
  83. package/nodes/math/CondNode.d.ts +0 -26
  84. package/nodes/math/MathNode.d.ts +0 -57
  85. package/nodes/math/OperatorNode.d.ts +0 -17
  86. package/nodes/procedural/CheckerNode.d.ts +0 -17
  87. package/nodes/utils/JoinNode.d.ts +0 -15
  88. package/nodes/utils/TimerNode.d.ts +0 -19
  89. package/objects/ReflectorRTT.d.ts +0 -6
package/index.d.ts CHANGED
@@ -1,6 +1,3 @@
1
- export * from './offscreen/scene';
2
- export * from './offscreen/offscreen';
3
- export * from './offscreen/jank';
4
1
  export * from './misc/MD2CharacterComplex';
5
2
  export * from './misc/ConvexObjectBreaker';
6
3
  export * from './misc/MorphBlendMesh';
@@ -13,73 +10,14 @@ export * from './misc/MD2Character';
13
10
  export * from './misc/VolumeSlice';
14
11
  export * from './misc/TubePainter';
15
12
  export * from './misc/Volume';
16
- export * from './misc/ProgressiveLightmap';
17
13
  export * from './renderers/CSS2DRenderer';
18
- export * from './renderers/nodes/core/constants';
19
- export * from './renderers/nodes/core/NodeBuilder';
20
- export * from './renderers/nodes/core/InputNode';
21
- export * from './renderers/nodes/core/NodeUniform';
22
- export * from './renderers/nodes/core/NodeVary';
23
- export * from './renderers/nodes/core/NodeFrame';
24
- export * from './renderers/nodes/core/Node';
25
- export * from './renderers/nodes/core/NodeSlot';
26
- export * from './renderers/nodes/core/NodeAttribute';
27
- export * from './renderers/nodes/core/VaryNode';
28
- export * from './renderers/nodes/core/AttributeNode';
29
- export * from './renderers/nodes/accessors/CameraNode';
30
- export * from './renderers/nodes/accessors/UVNode';
31
- export * from './renderers/nodes/accessors/ModelNode';
32
- export * from './renderers/nodes/accessors/NormalNode';
33
- export * from './renderers/nodes/accessors/PositionNode';
34
- export * from './renderers/nodes/accessors/ModelViewProjectionNode';
35
- export * from './renderers/nodes/utils/SwitchNode';
36
- export * from './renderers/nodes/utils/TimerNode';
37
- export * from './renderers/nodes/math/OperatorNode';
38
- export * from './renderers/nodes/math/MathNode';
39
- export * from './renderers/nodes/inputs/ColorNode';
40
- export * from './renderers/nodes/inputs/Vector3Node';
41
- export * from './renderers/nodes/inputs/Matrix4Node';
42
- export * from './renderers/nodes/inputs/TextureNode';
43
- export * from './renderers/nodes/inputs/FloatNode';
44
- export * from './renderers/nodes/inputs/Vector2Node';
45
- export * from './renderers/nodes/inputs/Vector4Node';
46
- export * from './renderers/nodes/inputs/Matrix3Node';
47
- export * from './renderers/webgpu/constants';
48
- export * from './renderers/webgpu/WebGPUTextures';
49
- export * from './renderers/webgpu/WebGPUInfo';
50
- export * from './renderers/webgpu/WebGPURenderLists';
51
- export * from './renderers/webgpu/WebGPUTextureRenderer';
52
- export * from './renderers/webgpu/WebGPURenderPipelines';
53
- export * from './renderers/webgpu/WebGPUGeometries';
54
- export * from './renderers/webgpu/nodes/WebGPUNodeBuilder';
55
- export * from './renderers/webgpu/nodes/WebGPUNodeUniform';
56
- export * from './renderers/webgpu/nodes/WebGPUNodeUniformsGroup';
57
- export * from './renderers/webgpu/nodes/ShaderLib';
58
- export * from './renderers/webgpu/nodes/WebGPUNodes';
59
- export * from './renderers/webgpu/WebGPUBindings';
60
- export * from './renderers/webgpu/WebGPUSampledTexture';
61
- export * from './renderers/webgpu/WebGPU';
62
- export * from './renderers/webgpu/WebGPUUniformsGroup';
63
- export * from './renderers/webgpu/WebGPURenderer';
64
- export * from './renderers/webgpu/WebGPUComputePipelines';
65
- export * from './renderers/webgpu/WebGPUUniform';
66
- export * from './renderers/webgpu/WebGPUObjects';
67
- export * from './renderers/webgpu/WebGPUSampler';
68
- export * from './renderers/webgpu/WebGPUBackground';
69
- export * from './renderers/webgpu/WebGPUBinding';
70
- export * from './renderers/webgpu/WebGPUProperties';
71
- export * from './renderers/webgpu/WebGPUAttributes';
72
- export * from './renderers/webgpu/WebGPUStorageBuffer';
73
- export * from './renderers/webgpu/WebGPUTextureUtils';
74
14
  export * from './renderers/CSS3DRenderer';
75
15
  export * from './renderers/Projector';
76
16
  export * from './renderers/SVGRenderer';
77
- export * from './textures/FlakesTexture';
78
17
  export * from './modifiers/CurveModifier';
79
18
  export * from './modifiers/SimplifyModifier';
80
19
  export * from './modifiers/EdgeSplitModifier';
81
20
  export * from './modifiers/TessellateModifier';
82
- export * from './nodes/Nodes';
83
21
  export * from './exporters/GLTFExporter';
84
22
  export * from './exporters/USDZExporter';
85
23
  export * from './exporters/PLYExporter';
@@ -100,7 +38,6 @@ export * from './objects/Lensflare';
100
38
  export * from './objects/Water';
101
39
  export * from './objects/MarchingCubes';
102
40
  export * from './objects/LightningStorm';
103
- export * from './objects/ReflectorRTT';
104
41
  export * from './objects/ReflectorForSSRPass';
105
42
  export * from './objects/Sky';
106
43
  export * from './objects/Water2';
@@ -108,7 +45,6 @@ export * from './objects/GroundProjectedEnv';
108
45
  export * from './utils/SceneUtils';
109
46
  export * from './utils/UVsDebug';
110
47
  export * from './utils/GeometryUtils';
111
- export * from './utils/RoughnessMipmapper';
112
48
  export * from './utils/SkeletonUtils';
113
49
  export * from './utils/ShadowMapViewer';
114
50
  export * from './utils/BufferGeometryUtils';
@@ -158,7 +94,6 @@ export * from './postprocessing/TAARenderPass';
158
94
  export * from './postprocessing/ShaderPass';
159
95
  export * from './postprocessing/SSAARenderPass';
160
96
  export * from './postprocessing/RenderPass';
161
- export * from './postprocessing/RenderPixelatedPass';
162
97
  export * from './postprocessing/BloomPass';
163
98
  export * from './webxr/ARButton';
164
99
  export * from './webxr/OculusHandModel';
@@ -171,6 +106,7 @@ export * from './webxr/XRHandMeshModel';
171
106
  export * from './webxr/XRHandModelFactory';
172
107
  export * from './webxr/XRHandPrimitiveModel';
173
108
  export * from './geometries/ParametricGeometries';
109
+ export * from './geometries/ParametricGeometry';
174
110
  export * from './geometries/ConvexGeometry';
175
111
  export * from './geometries/LightningStrike';
176
112
  export * from './geometries/RoundedBoxGeometry';
@@ -179,10 +115,9 @@ export * from './geometries/DecalGeometry';
179
115
  export * from './geometries/TeapotGeometry';
180
116
  export * from './geometries/TextGeometry';
181
117
  export * from './csm/CSM';
182
- export * from './csm/Shader';
118
+ export * from './csm/CSMFrustum';
183
119
  export * from './csm/CSMHelper';
184
- export * from './csm/Frustum';
185
- export * from './shaders';
120
+ export * from './csm/CSMShader';
186
121
  export * from './interactive/SelectionHelper';
187
122
  export * from './interactive/SelectionBox';
188
123
  export * from './physics/AmmoPhysics';
@@ -199,16 +134,13 @@ export * from './loaders/LUTCubeLoader';
199
134
  export * from './loaders/NRRDLoader';
200
135
  export * from './loaders/STLLoader';
201
136
  export * from './loaders/MTLLoader';
202
- export * from './loaders/XLoader';
203
137
  export * from './loaders/BVHLoader';
204
138
  export * from './loaders/KMZLoader';
205
- export * from './loaders/VRMLoader';
206
139
  export * from './loaders/VRMLLoader';
207
140
  export * from './loaders/KTX2Loader';
208
141
  export * from './loaders/LottieLoader';
209
142
  export * from './loaders/TTFLoader';
210
143
  export * from './loaders/RGBELoader';
211
- export * from './loaders/AssimpLoader';
212
144
  export * from './loaders/ColladaLoader';
213
145
  export * from './loaders/MDDLoader';
214
146
  export * from './loaders/EXRLoader';
@@ -223,9 +155,6 @@ export * from './loaders/BasisTextureLoader';
223
155
  export * from './loaders/TDSLoader';
224
156
  export * from './loaders/LDrawLoader';
225
157
  export * from './loaders/GLTFLoader';
226
- export * from './loaders/lwo/LWO3Parser';
227
- export * from './loaders/lwo/LWO2Parser';
228
- export * from './loaders/lwo/IFFParser';
229
158
  export * from './loaders/SVGLoader';
230
159
  export * from './loaders/3DMLoader';
231
160
  export * from './loaders/OBJLoader';
@@ -240,7 +169,6 @@ export * from './loaders/PDBLoader';
240
169
  export * from './loaders/PRWMLoader';
241
170
  export * from './loaders/RGBMLoader';
242
171
  export * from './loaders/VOXLoader';
243
- export * from './loaders/NodeMaterialLoader';
244
172
  export * from './loaders/PCDLoader';
245
173
  export * from './loaders/LWOLoader';
246
174
  export * from './loaders/PLYLoader';
@@ -263,5 +191,3 @@ export * from './curves/NURBSCurve';
263
191
  export * from './curves/NURBSSurface';
264
192
  export * from './curves/CurveExtras';
265
193
  export * from './deprecated/Geometry';
266
- export * from './libs/MeshoptDecoder';
267
- export * from './libs/MotionControllers';
package/index.js CHANGED
@@ -117,6 +117,7 @@ export { XRHandMeshModel } from './webxr/XRHandMeshModel.js';
117
117
  export { XRHandModelFactory } from './webxr/XRHandModelFactory.js';
118
118
  export { XRHandPrimitiveModel } from './webxr/XRHandPrimitiveModel.js';
119
119
  export { ParametricGeometries } from './geometries/ParametricGeometries.js';
120
+ export { ParametricGeometry } from './geometries/ParametricGeometry.js';
120
121
  export { ConvexGeometry } from './geometries/ConvexGeometry.js';
121
122
  export { LightningStrike } from './geometries/LightningStrike.js';
122
123
  export { RoundedBoxGeometry } from './geometries/RoundedBoxGeometry.js';
@@ -125,7 +126,9 @@ export { DecalGeometry, DecalVertex } from './geometries/DecalGeometry.js';
125
126
  export { TeapotGeometry } from './geometries/TeapotGeometry.js';
126
127
  export { TextGeometry as TextBufferGeometry, TextGeometry } from './geometries/TextGeometry.js';
127
128
  export { CSM } from './csm/CSM.js';
129
+ export { CSMFrustum } from './csm/CSMFrustum.js';
128
130
  export { CSMHelper } from './csm/CSMHelper.js';
131
+ export { CSMShader } from './csm/CSMShader.js';
129
132
  export { SelectionHelper } from './interactive/SelectionHelper.js';
130
133
  export { SelectionBox } from './interactive/SelectionBox.js';
131
134
  export { AmmoPhysics } from './physics/AmmoPhysics.js';
@@ -276,13 +279,13 @@ export { default as NodeObjectLoader } from './nodes/loaders/NodeObjectLoader.js
276
279
  export { default as NodeMaterialLoader } from './nodes/loaders/NodeMaterialLoader.js';
277
280
  export { BRDF_GGX, BRDF_Lambert, D_GGX, F_Schlick, PhysicalLightingModel, RE_Direct_Physical, V_GGX_SmithCorrelated, getDistanceAttenuation } from './nodes/functions/BSDFs.js';
278
281
  export { EPSILON, INFINITY, ShaderNode, abs, acos, add, addTo, alphaTest, and, asin, assign, atan, attribute, bitAnd, bitOr, bitXor, bmat3, bmat4, bool, buffer, bvec2, bvec3, bvec4, cameraPosition, ceil, clamp, color, cond, cos, cross, dFdx, dFdy, degrees, diffuseColor, distance, div, dot, element, equal, exp, exp2, faceforward, float, floor, fract, greaterThan, greaterThanEqual, imat3, imat4, int, inversesqrt, invert, ivec2, ivec3, ivec4, join, label, length, lessThan, lessThanEqual, log, log2, mat3, mat4, max, metalness, min, mix, mod, mul, negate, nodeObject, normalGeometry, normalLocal, normalView, normalWorld, normalize, or, positionLocal, positionView, positionViewDirection, positionWorld, pow, pow2, pow3, pow4, radians, reflect, refract, remainder, roughness, round, sampler, saturate, shiftLeft, shiftRight, sign, sin, smoothstep, specularColor, sqrt, step, sub, tan, temp, texture, transformDirection, transformedNormalView, uint, umat3, umat4, uniform, uv, uvec2, uvec3, uvec4, vec2, vec3, vec4, viewMatrix, xor } from './nodes/ShaderNode.js';
282
+ export { BokehShader2 } from './shaders/BokehShader2.js';
279
283
  export { ACESFilmicToneMappingShader } from './shaders/ACESFilmicToneMappingShader.js';
280
284
  export { AfterimageShader } from './shaders/AfterimageShader.js';
281
285
  export { BasicShader } from './shaders/BasicShader.js';
282
286
  export { BleachBypassShader } from './shaders/BleachBypassShader.js';
283
287
  export { BlendShader } from './shaders/BlendShader.js';
284
288
  export { BokehShader } from './shaders/BokehShader.js';
285
- export { BokehDepthShader, BokehShader2 } from './shaders/BokehShader2.js';
286
289
  export { BrightnessContrastShader } from './shaders/BrightnessContrastShader.js';
287
290
  export { ColorCorrectionShader } from './shaders/ColorCorrectionShader.js';
288
291
  export { ColorifyShader } from './shaders/ColorifyShader.js';
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");const t=new e.Vector2,n={type:"",data:t};class s extends e.Group{constructor(s,r){super();const o=this,i=new e.Raycaster,d=new e.Matrix4,c=s.domElement;function a(e){e.stopPropagation(),t.x=e.clientX/c.clientWidth*2-1,t.y=-e.clientY/c.clientHeight*2+1,i.setFromCamera(t,r);const s=i.intersectObjects(o.children,!1);if(s.length>0){const t=s[0],r=t.object,o=t.uv;n.type=e.type,n.data.set(o.x,1-o.y),r.dispatchEvent(n)}}c.addEventListener("pointerdown",a),c.addEventListener("pointerup",a),c.addEventListener("pointermove",a),c.addEventListener("mousedown",a),c.addEventListener("mouseup",a),c.addEventListener("mousemove",a),c.addEventListener("click",a);const l={move:"mousemove",select:"click",selectstart:"mousedown",selectend:"mouseup"};function v(e){const t=e.target;d.identity().extractRotation(t.matrixWorld),i.ray.origin.setFromMatrixPosition(t.matrixWorld),i.ray.direction.set(0,0,-1).applyMatrix4(d);const s=i.intersectObjects(o.children,!1);if(s.length>0){const t=s[0],r=t.object,o=t.uv;n.type=l[e.type],n.data.set(o.x,1-o.y),r.dispatchEvent(n)}}const p=s.xr.getController(0);p.addEventListener("move",v),p.addEventListener("select",v),p.addEventListener("selectstart",v),p.addEventListener("selectend",v);const u=s.xr.getController(1);u.addEventListener("move",v),u.addEventListener("select",v),u.addEventListener("selectstart",v),u.addEventListener("selectend",v)}}exports.InteractiveGroup=s;
@@ -0,0 +1,5 @@
1
+ import { WebGLRenderer, Camera, Group } from 'three';
2
+
3
+ export class InteractiveGroup extends Group {
4
+ constructor(renderer: WebGLRenderer, camera: Camera);
5
+ }
@@ -0,0 +1,87 @@
1
+ import { Vector2, Group, Raycaster, Matrix4 } from 'three';
2
+
3
+ const _pointer = new Vector2();
4
+
5
+ const _event = {
6
+ type: '',
7
+ data: _pointer
8
+ };
9
+
10
+ class InteractiveGroup extends Group {
11
+ constructor(renderer, camera) {
12
+ super();
13
+ const scope = this;
14
+ const raycaster = new Raycaster();
15
+ const tempMatrix = new Matrix4(); // Pointer Events
16
+
17
+ const element = renderer.domElement;
18
+
19
+ function onPointerEvent(event) {
20
+ event.stopPropagation();
21
+ _pointer.x = event.clientX / element.clientWidth * 2 - 1;
22
+ _pointer.y = -(event.clientY / element.clientHeight) * 2 + 1;
23
+ raycaster.setFromCamera(_pointer, camera);
24
+ const intersects = raycaster.intersectObjects(scope.children, false);
25
+
26
+ if (intersects.length > 0) {
27
+ const intersection = intersects[0];
28
+ const object = intersection.object;
29
+ const uv = intersection.uv;
30
+ _event.type = event.type;
31
+
32
+ _event.data.set(uv.x, 1 - uv.y);
33
+
34
+ object.dispatchEvent(_event);
35
+ }
36
+ }
37
+
38
+ element.addEventListener('pointerdown', onPointerEvent);
39
+ element.addEventListener('pointerup', onPointerEvent);
40
+ element.addEventListener('pointermove', onPointerEvent);
41
+ element.addEventListener('mousedown', onPointerEvent);
42
+ element.addEventListener('mouseup', onPointerEvent);
43
+ element.addEventListener('mousemove', onPointerEvent);
44
+ element.addEventListener('click', onPointerEvent); // WebXR Controller Events
45
+ // TODO: Dispatch pointerevents too
46
+
47
+ const events = {
48
+ move: 'mousemove',
49
+ select: 'click',
50
+ selectstart: 'mousedown',
51
+ selectend: 'mouseup'
52
+ };
53
+
54
+ function onXRControllerEvent(event) {
55
+ const controller = event.target;
56
+ tempMatrix.identity().extractRotation(controller.matrixWorld);
57
+ raycaster.ray.origin.setFromMatrixPosition(controller.matrixWorld);
58
+ raycaster.ray.direction.set(0, 0, -1).applyMatrix4(tempMatrix);
59
+ const intersections = raycaster.intersectObjects(scope.children, false);
60
+
61
+ if (intersections.length > 0) {
62
+ const intersection = intersections[0];
63
+ const object = intersection.object;
64
+ const uv = intersection.uv;
65
+ _event.type = events[event.type];
66
+
67
+ _event.data.set(uv.x, 1 - uv.y);
68
+
69
+ object.dispatchEvent(_event);
70
+ }
71
+ }
72
+
73
+ const controller1 = renderer.xr.getController(0);
74
+ controller1.addEventListener('move', onXRControllerEvent);
75
+ controller1.addEventListener('select', onXRControllerEvent);
76
+ controller1.addEventListener('selectstart', onXRControllerEvent);
77
+ controller1.addEventListener('selectend', onXRControllerEvent);
78
+ const controller2 = renderer.xr.getController(1);
79
+ controller2.addEventListener('move', onXRControllerEvent);
80
+ controller2.addEventListener('select', onXRControllerEvent);
81
+ controller2.addEventListener('selectstart', onXRControllerEvent);
82
+ controller2.addEventListener('selectend', onXRControllerEvent);
83
+ }
84
+
85
+ }
86
+
87
+ export { InteractiveGroup };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),r=require("./LineSegments2.cjs.js"),t=require("./LineGeometry.cjs.js"),i=require("./LineMaterial.cjs.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("three"),require("./LineSegmentsGeometry.cjs.js");var s=n(e);class u extends r.LineSegments2{constructor(e=new t.LineGeometry,r=new i.LineMaterial({color:16777215*Math.random()})){super(e,r),s.default(this,"type","Line2"),s.default(this,"isLine2",!0)}}exports.Line2=u;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./LineSegments2.cjs.js"),r=require("./LineGeometry.cjs.js"),s=require("./LineMaterial.cjs.js");require("three"),require("./LineSegmentsGeometry.cjs.js");class i extends e.LineSegments2{constructor(e=new r.LineGeometry,i=new s.LineMaterial({color:16777215*Math.random()})){super(e,i),this.isLine2=!0,this.type="Line2"}}exports.Line2=i;
package/lines/Line2.d.ts CHANGED
@@ -1,9 +1,11 @@
1
- import { LineSegments2 } from './LineSegments2';
2
1
  import { LineGeometry } from './LineGeometry';
2
+ import { LineSegments2 } from './LineSegments2';
3
3
  import { LineMaterial } from './LineMaterial';
4
- declare class Line2 extends LineSegments2 {
5
- type: string;
6
- readonly isLine2 = true;
4
+
5
+ export class Line2 extends LineSegments2 {
6
+ geometry: LineGeometry;
7
+ material: LineMaterial;
8
+
7
9
  constructor(geometry?: LineGeometry, material?: LineMaterial);
10
+ readonly isLine2: true;
8
11
  }
9
- export { Line2 };
package/lines/Line2.js CHANGED
@@ -1,4 +1,3 @@
1
- import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
2
1
  import { LineSegments2 } from './LineSegments2.js';
3
2
  import { LineGeometry } from './LineGeometry.js';
4
3
  import { LineMaterial } from './LineMaterial.js';
@@ -8,10 +7,8 @@ class Line2 extends LineSegments2 {
8
7
  color: Math.random() * 0xffffff
9
8
  })) {
10
9
  super(geometry, material);
11
-
12
- _defineProperty(this, "type", 'Line2');
13
-
14
- _defineProperty(this, "isLine2", true);
10
+ this.isLine2 = true;
11
+ this.type = 'Line2';
15
12
  }
16
13
 
17
14
  }
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),t=require("./LineSegmentsGeometry.cjs.js");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("three");var s=r(e);class o extends t.LineSegmentsGeometry{constructor(){super(),s.default(this,"type","LineGeometry"),s.default(this,"isLineGeometry",!0),s.default(this,"setColors",(e=>{const t=e.length-3,r=new Float32Array(2*t);for(let s=0;s<t;s+=3)r[2*s]=e[s],r[2*s+1]=e[s+1],r[2*s+2]=e[s+2],r[2*s+3]=e[s+3],r[2*s+4]=e[s+4],r[2*s+5]=e[s+5];return super.setColors(r),this})),s.default(this,"fromLine",(e=>{const t=e.geometry;return t.isBufferGeometry&&this.setPositions(Array.from(t.attributes.position.array)),this})),s.default(this,"copy",(()=>this))}setPositions(e){const t=e.length-3,r=new Float32Array(2*t);for(let s=0;s<t;s+=3)r[2*s]=e[s],r[2*s+1]=e[s+1],r[2*s+2]=e[s+2],r[2*s+3]=e[s+3],r[2*s+4]=e[s+4],r[2*s+5]=e[s+5];return super.setPositions(r),this}}exports.LineGeometry=o;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./LineSegmentsGeometry.cjs.js");require("three");class t extends e.LineSegmentsGeometry{constructor(){super(),this.isLineGeometry=!0,this.type="LineGeometry"}setPositions(e){const t=e.length-3,s=new Float32Array(2*t);for(let r=0;r<t;r+=3)s[2*r]=e[r],s[2*r+1]=e[r+1],s[2*r+2]=e[r+2],s[2*r+3]=e[r+3],s[2*r+4]=e[r+4],s[2*r+5]=e[r+5];return super.setPositions(s),this}setColors(e){const t=e.length-3,s=new Float32Array(2*t);for(let r=0;r<t;r+=3)s[2*r]=e[r],s[2*r+1]=e[r+1],s[2*r+2]=e[r+2],s[2*r+3]=e[r+3],s[2*r+4]=e[r+4],s[2*r+5]=e[r+5];return super.setColors(s),this}fromLine(e){const t=e.geometry;return this.setPositions(t.attributes.position.array),this}}exports.LineGeometry=t;
@@ -1,12 +1,10 @@
1
1
  import { Line } from 'three';
2
+
2
3
  import { LineSegmentsGeometry } from './LineSegmentsGeometry';
3
- declare class LineGeometry extends LineSegmentsGeometry {
4
- type: string;
5
- private isLineGeometry;
4
+
5
+ export class LineGeometry extends LineSegmentsGeometry {
6
6
  constructor();
7
- setPositions(array: number[] | Float32Array): this;
8
- setColors: (array: number[] | Float32Array) => this;
9
- fromLine: (line: Line) => this;
10
- copy: () => this;
7
+ readonly isLineGeometry: true;
8
+
9
+ fromLine(line: Line): this;
11
10
  }
12
- export { LineGeometry };
@@ -1,47 +1,10 @@
1
- import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
2
1
  import { LineSegmentsGeometry } from './LineSegmentsGeometry.js';
3
2
 
4
3
  class LineGeometry extends LineSegmentsGeometry {
5
4
  constructor() {
6
5
  super();
7
-
8
- _defineProperty(this, "type", 'LineGeometry');
9
-
10
- _defineProperty(this, "isLineGeometry", true);
11
-
12
- _defineProperty(this, "setColors", array => {
13
- // converts [ r1, g1, b1, r2, g2, b2, ... ] to pairs format
14
- const length = array.length - 3;
15
- const colors = new Float32Array(2 * length);
16
-
17
- for (let i = 0; i < length; i += 3) {
18
- colors[2 * i] = array[i];
19
- colors[2 * i + 1] = array[i + 1];
20
- colors[2 * i + 2] = array[i + 2];
21
- colors[2 * i + 3] = array[i + 3];
22
- colors[2 * i + 4] = array[i + 4];
23
- colors[2 * i + 5] = array[i + 5];
24
- }
25
-
26
- super.setColors(colors);
27
- return this;
28
- });
29
-
30
- _defineProperty(this, "fromLine", line => {
31
- const geometry = line.geometry;
32
-
33
- if (geometry.isBufferGeometry) {
34
- this.setPositions(Array.from(geometry.attributes.position.array)); // assumes non-indexed
35
- } // set colors, maybe
36
-
37
-
38
- return this;
39
- });
40
-
41
- _defineProperty(this, "copy", () => {
42
- // todo
43
- return this;
44
- });
6
+ this.isLineGeometry = true;
7
+ this.type = 'LineGeometry';
45
8
  }
46
9
 
47
10
  setPositions(array) {
@@ -62,6 +25,32 @@ class LineGeometry extends LineSegmentsGeometry {
62
25
  return this;
63
26
  }
64
27
 
28
+ setColors(array) {
29
+ // converts [ r1, g1, b1, r2, g2, b2, ... ] to pairs format
30
+ const length = array.length - 3;
31
+ const colors = new Float32Array(2 * length);
32
+
33
+ for (let i = 0; i < length; i += 3) {
34
+ colors[2 * i] = array[i];
35
+ colors[2 * i + 1] = array[i + 1];
36
+ colors[2 * i + 2] = array[i + 2];
37
+ colors[2 * i + 3] = array[i + 3];
38
+ colors[2 * i + 4] = array[i + 4];
39
+ colors[2 * i + 5] = array[i + 5];
40
+ }
41
+
42
+ super.setColors(colors);
43
+ return this;
44
+ }
45
+
46
+ fromLine(line) {
47
+ const geometry = line.geometry;
48
+ this.setPositions(geometry.attributes.position.array); // assumes non-indexed
49
+ // set colors, maybe
50
+
51
+ return this;
52
+ }
53
+
65
54
  }
66
55
 
67
56
  export { LineGeometry };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("@babel/runtime/helpers/defineProperty"),n=require("three");function e(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var i=e(t);const a={linewidth:{value:1},resolution:{value:new n.Vector2(1,1)},dashScale:{value:1},dashSize:{value:1},dashOffset:{value:0},gapSize:{value:1},opacity:{value:1}};n.ShaderLib.line={uniforms:n.UniformsUtils.merge([n.UniformsLib.common,n.UniformsLib.fog,a]),vertexShader:"\n\t\t#include <common>\n\t\t#include <color_pars_vertex>\n\t\t#include <fog_pars_vertex>\n\t\t#include <logdepthbuf_pars_vertex>\n\t\t#include <clipping_planes_pars_vertex>\n\n\t\tuniform float linewidth;\n\t\tuniform vec2 resolution;\n\n\t\tattribute vec3 instanceStart;\n\t\tattribute vec3 instanceEnd;\n\n\t\tattribute vec3 instanceColorStart;\n\t\tattribute vec3 instanceColorEnd;\n\n\t\tvarying vec2 vUv;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashScale;\n\t\t\tattribute float instanceDistanceStart;\n\t\t\tattribute float instanceDistanceEnd;\n\t\t\tvarying float vLineDistance;\n\n\t\t#endif\n\n\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t// conservative estimate of the near plane\n\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#ifdef USE_COLOR\n\n\t\t\t\tvColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\n\t\t\t#endif\n\n\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\tvUv = uv;\n\n\t\t\t// camera space\n\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\tif ( perspective ) {\n\n\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// clip space\n\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t// ndc space\n\t\t\tvec2 ndcStart = clipStart.xy / clipStart.w;\n\t\t\tvec2 ndcEnd = clipEnd.xy / clipEnd.w;\n\n\t\t\t// direction\n\t\t\tvec2 dir = ndcEnd - ndcStart;\n\n\t\t\t// account for clip-space aspect ratio\n\t\t\tdir.x *= aspect;\n\t\t\tdir = normalize( dir );\n\n\t\t\t// perpendicular to dir\n\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\n\t\t\t// undo aspect ratio adjustment\n\t\t\tdir.x /= aspect;\n\t\t\toffset.x /= aspect;\n\n\t\t\t// sign flip\n\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t// endcaps\n\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\toffset += - dir;\n\n\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\toffset += dir;\n\n\t\t\t}\n\n\t\t\t// adjust for linewidth\n\t\t\toffset *= linewidth;\n\n\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\toffset /= resolution.y;\n\n\t\t\t// select end\n\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t// back to clip space\n\t\t\toffset *= clip.w;\n\n\t\t\tclip.xy += offset;\n\n\t\t\tgl_Position = clip;\n\n\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t#include <logdepthbuf_vertex>\n\t\t\t#include <clipping_planes_vertex>\n\t\t\t#include <fog_vertex>\n\n\t\t}\n\t\t",fragmentShader:"\n\t\tuniform vec3 diffuse;\n\t\tuniform float opacity;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashSize;\n\t\t\tuniform float dashOffset;\n\t\t\tuniform float gapSize;\n\n\t\t#endif\n\n\t\tvarying float vLineDistance;\n\n\t\t#include <common>\n\t\t#include <color_pars_fragment>\n\t\t#include <fog_pars_fragment>\n\t\t#include <logdepthbuf_pars_fragment>\n\t\t#include <clipping_planes_pars_fragment>\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\t#include <clipping_planes_fragment>\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\tif ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t#endif\n\n\t\t\tfloat alpha = opacity;\n\n\t\t\t#ifdef ALPHA_TO_COVERAGE\n\n\t\t\t// artifacts appear on some hardware if a derivative is taken within a conditional\n\t\t\tfloat a = vUv.x;\n\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\tfloat len2 = a * a + b * b;\n\t\t\tfloat dlen = fwidth( len2 );\n\n\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\talpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );\n\n\t\t\t}\n\n\t\t\t#else\n\n\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\tfloat a = vUv.x;\n\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t}\n\n\t\t\t#endif\n\n\t\t\tvec4 diffuseColor = vec4( diffuse, alpha );\n\n\t\t\t#include <logdepthbuf_fragment>\n\t\t\t#include <color_fragment>\n\n\t\t\tgl_FragColor = vec4( diffuseColor.rgb, alpha );\n\n\t\t\t#include <tonemapping_fragment>\n\t\t\t#include <encodings_fragment>\n\t\t\t#include <fog_fragment>\n\t\t\t#include <premultiplied_alpha_fragment>\n\n\t\t}\n\t\t"};class s extends n.ShaderMaterial{constructor(t={}){super({uniforms:n.UniformsUtils.clone(n.ShaderLib.line.uniforms),vertexShader:n.ShaderLib.line.vertexShader,fragmentShader:n.ShaderLib.line.fragmentShader,clipping:!0}),i.default(this,"isLineMaterial",!0),i.default(this,"dashed",!1),i.default(this,"color",new n.Color(0)),i.default(this,"lineWidth",0),i.default(this,"dashScale",0),i.default(this,"dashOffset",0),i.default(this,"dashSize",0),i.default(this,"opacity",0),i.default(this,"resolution",new n.Vector2),i.default(this,"alphaToCoverage",!1),Object.defineProperties(this,{color:{enumerable:!0,get:function(){return this.uniforms.diffuse.value},set:function(t){const e=new n.Color(t);this.uniforms.diffuse.value=e.getHex()}},linewidth:{enumerable:!0,get:function(){return this.uniforms.linewidth.value},set:function(t){this.uniforms.linewidth.value=t}},dashScale:{enumerable:!0,get:function(){return this.uniforms.dashScale.value},set:function(t){this.uniforms.dashScale.value=t}},dashSize:{enumerable:!0,get:function(){return this.uniforms.dashSize.value},set:function(t){this.uniforms.dashSize.value=t}},dashOffset:{enumerable:!0,get:function(){return this.uniforms.dashOffset.value},set:function(t){this.uniforms.dashOffset.value=t}},gapSize:{enumerable:!0,get:function(){return this.uniforms.gapSize.value},set:function(t){this.uniforms.gapSize.value=t}},opacity:{enumerable:!0,get:function(){return this.uniforms.opacity.value},set:function(t){this.uniforms.opacity.value=t}},resolution:{enumerable:!0,get:function(){return this.uniforms.resolution.value},set:function(t){this.uniforms.resolution.value.copy(t)}},alphaToCoverage:{enumerable:!0,get:function(){return Boolean("ALPHA_TO_COVERAGE"in this.defines)},set:function(t){Boolean(t)!==Boolean("ALPHA_TO_COVERAGE"in this.defines)&&(this.needsUpdate=!0),t?(this.defines.ALPHA_TO_COVERAGE="",this.extensions.derivatives=!0):(delete this.defines.ALPHA_TO_COVERAGE,this.extensions.derivatives=!1)}},dashed:{enumerable:!0,get:function(){return Boolean("USE_DASH"in this.defines)},set:function(t){Boolean(t)!==Boolean("USE_DASH"in this.defines)&&(this.needsUpdate=!0),t?this.defines.USE_DASH="":delete this.defines.USE_DASH}}}),this.setValues(t)}}exports.LineMaterial=s;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("three");t.UniformsLib.line={worldUnits:{value:1},linewidth:{value:1},resolution:{value:new t.Vector2(1,1)},dashOffset:{value:0},dashScale:{value:1},dashSize:{value:1},gapSize:{value:1}},t.ShaderLib.line={uniforms:t.UniformsUtils.merge([t.UniformsLib.common,t.UniformsLib.fog,t.UniformsLib.line]),vertexShader:"\n\t\t#include <common>\n\t\t#include <color_pars_vertex>\n\t\t#include <fog_pars_vertex>\n\t\t#include <logdepthbuf_pars_vertex>\n\t\t#include <clipping_planes_pars_vertex>\n\n\t\tuniform float linewidth;\n\t\tuniform vec2 resolution;\n\n\t\tattribute vec3 instanceStart;\n\t\tattribute vec3 instanceEnd;\n\n\t\tattribute vec3 instanceColorStart;\n\t\tattribute vec3 instanceColorEnd;\n\n\t\t#ifdef WORLD_UNITS\n\n\t\t\tvarying vec4 worldPos;\n\t\t\tvarying vec3 worldStart;\n\t\t\tvarying vec3 worldEnd;\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t#endif\n\n\t\t#else\n\n\t\t\tvarying vec2 vUv;\n\n\t\t#endif\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashScale;\n\t\t\tattribute float instanceDistanceStart;\n\t\t\tattribute float instanceDistanceEnd;\n\t\t\tvarying float vLineDistance;\n\n\t\t#endif\n\n\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t// conservative estimate of the near plane\n\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#ifdef USE_COLOR\n\n\t\t\t\tvColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\t\t\t\tvUv = uv;\n\n\t\t\t#endif\n\n\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\t// camera space\n\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\tworldStart = start.xyz;\n\t\t\t\tworldEnd = end.xyz;\n\n\t\t\t#else\n\n\t\t\t\tvUv = uv;\n\n\t\t\t#endif\n\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\tif ( perspective ) {\n\n\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// clip space\n\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t// ndc space\n\t\t\tvec3 ndcStart = clipStart.xyz / clipStart.w;\n\t\t\tvec3 ndcEnd = clipEnd.xyz / clipEnd.w;\n\n\t\t\t// direction\n\t\t\tvec2 dir = ndcEnd.xy - ndcStart.xy;\n\n\t\t\t// account for clip-space aspect ratio\n\t\t\tdir.x *= aspect;\n\t\t\tdir = normalize( dir );\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t// get the offset direction as perpendicular to the view vector\n\t\t\t\tvec3 worldDir = normalize( end.xyz - start.xyz );\n\t\t\t\tvec3 offset;\n\t\t\t\tif ( position.y < 0.5 ) {\n\n\t\t\t\t\toffset = normalize( cross( start.xyz, worldDir ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\toffset = normalize( cross( end.xyz, worldDir ) );\n\n\t\t\t\t}\n\n\t\t\t\t// sign flip\n\t\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t\tfloat forwardOffset = dot( worldDir, vec3( 0.0, 0.0, 1.0 ) );\n\n\t\t\t\t// don't extend the line if we're rendering dashes because we\n\t\t\t\t// won't be rendering the endcaps\n\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t// extend the line bounds to encompass endcaps\n\t\t\t\t\tstart.xyz += - worldDir * linewidth * 0.5;\n\t\t\t\t\tend.xyz += worldDir * linewidth * 0.5;\n\n\t\t\t\t\t// shift the position of the quad so it hugs the forward edge of the line\n\t\t\t\t\toffset.xy -= dir * forwardOffset;\n\t\t\t\t\toffset.z += 0.5;\n\n\t\t\t\t#endif\n\n\t\t\t\t// endcaps\n\t\t\t\tif ( position.y > 1.0 || position.y < 0.0 ) {\n\n\t\t\t\t\toffset.xy += dir * 2.0 * forwardOffset;\n\n\t\t\t\t}\n\n\t\t\t\t// adjust for linewidth\n\t\t\t\toffset *= linewidth * 0.5;\n\n\t\t\t\t// set the world position\n\t\t\t\tworldPos = ( position.y < 0.5 ) ? start : end;\n\t\t\t\tworldPos.xyz += offset;\n\n\t\t\t\t// project the worldpos\n\t\t\t\tvec4 clip = projectionMatrix * worldPos;\n\n\t\t\t\t// shift the depth of the projected points so the line\n\t\t\t\t// segments overlap neatly\n\t\t\t\tvec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;\n\t\t\t\tclip.z = clipPose.z * clip.w;\n\n\t\t\t#else\n\n\t\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\t\t\t\t// undo aspect ratio adjustment\n\t\t\t\tdir.x /= aspect;\n\t\t\t\toffset.x /= aspect;\n\n\t\t\t\t// sign flip\n\t\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t\t// endcaps\n\t\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\t\toffset += - dir;\n\n\t\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\t\toffset += dir;\n\n\t\t\t\t}\n\n\t\t\t\t// adjust for linewidth\n\t\t\t\toffset *= linewidth;\n\n\t\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\t\toffset /= resolution.y;\n\n\t\t\t\t// select end\n\t\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t\t// back to clip space\n\t\t\t\toffset *= clip.w;\n\n\t\t\t\tclip.xy += offset;\n\n\t\t\t#endif\n\n\t\t\tgl_Position = clip;\n\n\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t#include <logdepthbuf_vertex>\n\t\t\t#include <clipping_planes_vertex>\n\t\t\t#include <fog_vertex>\n\n\t\t}\n\t\t",fragmentShader:"\n\t\tuniform vec3 diffuse;\n\t\tuniform float opacity;\n\t\tuniform float linewidth;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashOffset;\n\t\t\tuniform float dashSize;\n\t\t\tuniform float gapSize;\n\n\t\t#endif\n\n\t\tvarying float vLineDistance;\n\n\t\t#ifdef WORLD_UNITS\n\n\t\t\tvarying vec4 worldPos;\n\t\t\tvarying vec3 worldStart;\n\t\t\tvarying vec3 worldEnd;\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t#endif\n\n\t\t#else\n\n\t\t\tvarying vec2 vUv;\n\n\t\t#endif\n\n\t\t#include <common>\n\t\t#include <color_pars_fragment>\n\t\t#include <fog_pars_fragment>\n\t\t#include <logdepthbuf_pars_fragment>\n\t\t#include <clipping_planes_pars_fragment>\n\n\t\tvec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {\n\n\t\t\tfloat mua;\n\t\t\tfloat mub;\n\n\t\t\tvec3 p13 = p1 - p3;\n\t\t\tvec3 p43 = p4 - p3;\n\n\t\t\tvec3 p21 = p2 - p1;\n\n\t\t\tfloat d1343 = dot( p13, p43 );\n\t\t\tfloat d4321 = dot( p43, p21 );\n\t\t\tfloat d1321 = dot( p13, p21 );\n\t\t\tfloat d4343 = dot( p43, p43 );\n\t\t\tfloat d2121 = dot( p21, p21 );\n\n\t\t\tfloat denom = d2121 * d4343 - d4321 * d4321;\n\n\t\t\tfloat numer = d1343 * d4321 - d1321 * d4343;\n\n\t\t\tmua = numer / denom;\n\t\t\tmua = clamp( mua, 0.0, 1.0 );\n\t\t\tmub = ( d1343 + d4321 * ( mua ) ) / d4343;\n\t\t\tmub = clamp( mub, 0.0, 1.0 );\n\n\t\t\treturn vec2( mua, mub );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#include <clipping_planes_fragment>\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\tif ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t#endif\n\n\t\t\tfloat alpha = opacity;\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t// Find the closest points on the view ray and the line segment\n\t\t\t\tvec3 rayEnd = normalize( worldPos.xyz ) * 1e5;\n\t\t\t\tvec3 lineDir = worldEnd - worldStart;\n\t\t\t\tvec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );\n\n\t\t\t\tvec3 p1 = worldStart + lineDir * params.x;\n\t\t\t\tvec3 p2 = rayEnd * params.y;\n\t\t\t\tvec3 delta = p1 - p2;\n\t\t\t\tfloat len = length( delta );\n\t\t\t\tfloat norm = len / linewidth;\n\n\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t\tfloat dnorm = fwidth( norm );\n\t\t\t\t\t\talpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm );\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tif ( norm > 0.5 ) {\n\n\t\t\t\t\t\t\tdiscard;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t#endif\n\n\t\t\t\t#endif\n\n\t\t\t#else\n\n\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t// artifacts appear on some hardware if a derivative is taken within a conditional\n\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\tfloat len2 = a * a + b * b;\n\t\t\t\t\tfloat dlen = fwidth( len2 );\n\n\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\talpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t#else\n\n\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t\t\t}\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\tvec4 diffuseColor = vec4( diffuse, alpha );\n\n\t\t\t#include <logdepthbuf_fragment>\n\t\t\t#include <color_fragment>\n\n\t\t\tgl_FragColor = vec4( diffuseColor.rgb, alpha );\n\n\t\t\t#include <tonemapping_fragment>\n\t\t\t#include <encodings_fragment>\n\t\t\t#include <fog_fragment>\n\t\t\t#include <premultiplied_alpha_fragment>\n\n\t\t}\n\t\t"};class n extends t.ShaderMaterial{constructor(n){super({type:"LineMaterial",uniforms:t.UniformsUtils.clone(t.ShaderLib.line.uniforms),vertexShader:t.ShaderLib.line.vertexShader,fragmentShader:t.ShaderLib.line.fragmentShader,clipping:!0}),this.isLineMaterial=!0,Object.defineProperties(this,{color:{enumerable:!0,get:function(){return this.uniforms.diffuse.value},set:function(t){this.uniforms.diffuse.value=t}},worldUnits:{enumerable:!0,get:function(){return"WORLD_UNITS"in this.defines},set:function(t){!0===t?this.defines.WORLD_UNITS="":delete this.defines.WORLD_UNITS}},linewidth:{enumerable:!0,get:function(){return this.uniforms.linewidth.value},set:function(t){this.uniforms.linewidth.value=t}},dashed:{enumerable:!0,get:function(){return Boolean("USE_DASH"in this.defines)},set(t){Boolean(t)!==Boolean("USE_DASH"in this.defines)&&(this.needsUpdate=!0),!0===t?this.defines.USE_DASH="":delete this.defines.USE_DASH}},dashScale:{enumerable:!0,get:function(){return this.uniforms.dashScale.value},set:function(t){this.uniforms.dashScale.value=t}},dashSize:{enumerable:!0,get:function(){return this.uniforms.dashSize.value},set:function(t){this.uniforms.dashSize.value=t}},dashOffset:{enumerable:!0,get:function(){return this.uniforms.dashOffset.value},set:function(t){this.uniforms.dashOffset.value=t}},gapSize:{enumerable:!0,get:function(){return this.uniforms.gapSize.value},set:function(t){this.uniforms.gapSize.value=t}},opacity:{enumerable:!0,get:function(){return this.uniforms.opacity.value},set:function(t){this.uniforms.opacity.value=t}},resolution:{enumerable:!0,get:function(){return this.uniforms.resolution.value},set:function(t){this.uniforms.resolution.value.copy(t)}},alphaToCoverage:{enumerable:!0,get:function(){return Boolean("USE_ALPHA_TO_COVERAGE"in this.defines)},set:function(t){Boolean(t)!==Boolean("USE_ALPHA_TO_COVERAGE"in this.defines)&&(this.needsUpdate=!0),!0===t?(this.defines.USE_ALPHA_TO_COVERAGE="",this.extensions.derivatives=!0):(delete this.defines.USE_ALPHA_TO_COVERAGE,this.extensions.derivatives=!1)}}}),this.setValues(n)}}exports.LineMaterial=n;
@@ -1,27 +1,31 @@
1
- import { ShaderMaterial, Vector2, Color } from 'three';
2
- import type { ShaderMaterialParameters } from 'three';
3
- export declare type ColorOptions = Color | string | number;
4
- export interface LineMaterialParameters extends ShaderMaterialParameters {
5
- color?: ColorOptions;
6
- dashed?: boolean;
7
- dashOffset?: number;
8
- dashScale?: number;
9
- dashSize?: number;
10
- gapSize?: number;
11
- linewidth?: number;
12
- resolution?: Vector2;
1
+ import { Color, MaterialParameters, ShaderMaterial, Vector2 } from 'three';
2
+
3
+ export interface LineMaterialParameters extends MaterialParameters {
4
+ alphaToCoverage?: boolean | undefined;
5
+ color?: number | undefined;
6
+ dashed?: boolean | undefined;
7
+ dashScale?: number | undefined;
8
+ dashSize?: number | undefined;
9
+ dashOffset?: number | undefined;
10
+ gapSize?: number | undefined;
11
+ linewidth?: number | undefined;
12
+ resolution?: Vector2 | undefined;
13
+ wireframe?: boolean | undefined;
14
+ worldUnits?: boolean | undefined;
13
15
  }
14
- declare class LineMaterial extends ShaderMaterial {
15
- private readonly isLineMaterial;
16
- dashed: boolean;
16
+
17
+ export class LineMaterial extends ShaderMaterial {
18
+ constructor(parameters?: LineMaterialParameters);
17
19
  color: Color;
18
- lineWidth: number;
20
+ dashed: boolean;
19
21
  dashScale: number;
20
- dashOffset: number;
21
22
  dashSize: number;
23
+ dashOffset: number;
24
+ gapSize: number;
22
25
  opacity: number;
26
+ readonly isLineMaterial: true;
27
+ linewidth: number;
23
28
  resolution: Vector2;
24
29
  alphaToCoverage: boolean;
25
- constructor(parameters?: LineMaterialParameters);
30
+ worldUnits: boolean;
26
31
  }
27
- export { LineMaterial };