super-three 0.161.0 → 0.163.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 +822 -1332
- package/build/three.module.js +820 -1328
- package/build/three.module.min.js +1 -1
- package/examples/jsm/controls/DragControls.js +91 -30
- package/examples/jsm/controls/OrbitControls.js +32 -6
- package/examples/jsm/controls/TransformControls.js +9 -9
- package/examples/jsm/exporters/GLTFExporter.js +30 -3
- package/examples/jsm/exporters/USDZExporter.js +15 -0
- package/examples/jsm/geometries/TextGeometry.js +10 -2
- package/examples/jsm/interactive/HTMLMesh.js +7 -9
- package/examples/jsm/interactive/InteractiveGroup.js +15 -25
- package/examples/jsm/libs/fflate.module.js +694 -496
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +1 -8723
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +1 -8734
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/libs/tween.module.js +32 -14
- package/examples/jsm/lines/LineMaterial.js +0 -2
- package/examples/jsm/loaders/3DMLoader.js +13 -21
- package/examples/jsm/loaders/3MFLoader.js +2 -0
- package/examples/jsm/loaders/EXRLoader.js +89 -19
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +6 -0
- package/examples/jsm/loaders/KTX2Loader.js +2 -6
- 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/VOXLoader.js +9 -2
- package/examples/jsm/loaders/VRMLLoader.js +6 -2
- package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
- package/examples/jsm/misc/ProgressiveLightMap.js +1 -0
- package/examples/jsm/nodes/Nodes.js +15 -8
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +10 -0
- package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
- package/examples/jsm/nodes/accessors/ClippingNode.js +144 -0
- package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
- package/examples/jsm/nodes/accessors/MaterialNode.js +2 -2
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -12
- package/examples/jsm/nodes/accessors/MorphNode.js +20 -10
- package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
- package/examples/jsm/nodes/accessors/ReferenceNode.js +87 -29
- package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
- package/examples/jsm/nodes/accessors/SkinningNode.js +31 -10
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +18 -0
- package/examples/jsm/nodes/accessors/TangentNode.js +8 -2
- package/examples/jsm/nodes/accessors/TextureNode.js +30 -7
- package/examples/jsm/nodes/accessors/UniformsNode.js +140 -0
- package/examples/jsm/nodes/code/CodeNode.js +6 -0
- package/examples/jsm/nodes/core/AssignNode.js +68 -12
- package/examples/jsm/nodes/core/Node.js +67 -6
- package/examples/jsm/nodes/core/NodeBuilder.js +23 -24
- package/examples/jsm/nodes/core/NodeFrame.js +8 -8
- package/examples/jsm/nodes/core/NodeUtils.js +2 -2
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformNode.js +20 -0
- package/examples/jsm/nodes/display/BlendModeNode.js +30 -1
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -5
- package/examples/jsm/nodes/display/PassNode.js +17 -1
- package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
- 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/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +12 -69
- package/examples/jsm/nodes/materials/NodeMaterial.js +70 -17
- package/examples/jsm/nodes/math/CondNode.js +42 -7
- package/examples/jsm/nodes/math/MathNode.js +20 -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 +1 -1
- package/examples/jsm/nodes/utils/ArrayElementNode.js +0 -6
- package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
- package/examples/jsm/nodes/utils/LoopNode.js +2 -0
- package/examples/jsm/nodes/utils/StorageArrayElementNode.js +91 -0
- package/examples/jsm/objects/QuadMesh.js +7 -23
- 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/OutputPass.js +2 -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 +3 -3
- package/examples/jsm/renderers/common/ClippingContext.js +165 -0
- 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 +3 -1
- package/examples/jsm/renderers/common/RenderContexts.js +2 -13
- package/examples/jsm/renderers/common/RenderObject.js +46 -3
- package/examples/jsm/renderers/common/RenderObjects.js +2 -0
- package/examples/jsm/renderers/common/Renderer.js +113 -39
- package/examples/jsm/renderers/common/StorageBufferAttribute.js +2 -2
- package/examples/jsm/renderers/common/StorageInstancedBufferAttribute.js +17 -0
- package/examples/jsm/renderers/common/Textures.js +3 -13
- package/examples/jsm/renderers/common/UniformsGroup.js +6 -4
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +777 -0
- package/examples/jsm/renderers/common/nodes/NodeStorageBuffer.js +23 -0
- package/examples/jsm/renderers/common/nodes/NodeUniformBuffer.js +23 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +6 -18
- package/examples/jsm/renderers/webgl/WebGLBackend.js +174 -30
- package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +141 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +136 -11
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +8 -2
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +90 -0
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -2
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +67 -37
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +20 -43
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +32 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +94 -20
- package/examples/jsm/shaders/OutputShader.js +4 -0
- package/examples/jsm/utils/GPUStatsPanel.js +10 -45
- package/examples/jsm/utils/SkeletonUtils.js +14 -3
- package/examples/jsm/utils/TextureUtils.js +1 -1
- package/examples/jsm/webxr/VRButton.js +13 -5
- package/examples/jsm/webxr/XRButton.js +0 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +8 -0
- package/package.json +4 -3
- package/src/Three.Legacy.js +20 -0
- package/src/Three.js +0 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/constants.js +4 -7
- package/src/core/BufferAttribute.js +0 -11
- package/src/core/BufferGeometry.js +23 -29
- package/src/core/Object3D.js +21 -7
- package/src/core/Raycaster.js +18 -4
- package/src/core/RenderTarget.js +44 -21
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/curves/EllipseCurve.js +2 -2
- package/src/helpers/SpotLightHelper.js +18 -1
- package/src/loaders/DataTextureLoader.js +0 -4
- package/src/loaders/MaterialLoader.js +1 -0
- package/src/loaders/ObjectLoader.js +4 -1
- package/src/materials/Material.js +2 -1
- package/src/materials/MeshBasicMaterial.js +3 -0
- package/src/materials/MeshLambertMaterial.js +3 -0
- package/src/materials/MeshPhongMaterial.js +3 -0
- package/src/materials/MeshStandardMaterial.js +3 -0
- package/src/materials/ShaderMaterial.js +0 -4
- package/src/math/Quaternion.js +13 -12
- package/src/math/Spherical.js +4 -5
- package/src/math/Vector3.js +7 -7
- package/src/objects/BatchedMesh.js +4 -3
- package/src/objects/InstancedMesh.js +63 -0
- package/src/objects/Mesh.js +0 -1
- package/src/renderers/WebGLCubeRenderTarget.js +1 -10
- package/src/renderers/WebGLRenderer.js +70 -136
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -0
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- 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/map_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
- package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +11 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +23 -0
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +3 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/points.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib.js +3 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +10 -1
- package/src/renderers/webgl/WebGLAttributes.js +6 -33
- package/src/renderers/webgl/WebGLBackground.js +18 -0
- package/src/renderers/webgl/WebGLBindingStates.js +14 -51
- package/src/renderers/webgl/WebGLBufferRenderer.js +3 -25
- package/src/renderers/webgl/WebGLCapabilities.js +2 -12
- package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
- package/src/renderers/webgl/WebGLExtensions.js +4 -19
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +3 -25
- package/src/renderers/webgl/WebGLLights.js +6 -32
- package/src/renderers/webgl/WebGLMaterials.js +26 -4
- package/src/renderers/webgl/WebGLMorphtargets.js +79 -210
- package/src/renderers/webgl/WebGLProgram.js +30 -48
- package/src/renderers/webgl/WebGLPrograms.js +5 -14
- package/src/renderers/webgl/WebGLRenderStates.js +8 -6
- package/src/renderers/webgl/WebGLState.js +21 -75
- package/src/renderers/webgl/WebGLTextures.js +143 -275
- package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
- package/src/renderers/webgl/WebGLUtils.js +6 -57
- package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/scenes/Scene.js +14 -0
- package/src/textures/Texture.js +6 -24
- package/examples/jsm/nodes/core/ArrayUniformNode.js +0 -26
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
- package/src/renderers/WebGL1Renderer.js +0 -7
- package/src/renderers/WebGLMultipleRenderTargets.js +0 -82
|
@@ -12,10 +12,15 @@ const _raycaster = new Raycaster();
|
|
|
12
12
|
|
|
13
13
|
const _pointer = new Vector2();
|
|
14
14
|
const _offset = new Vector3();
|
|
15
|
+
const _diff = new Vector2();
|
|
16
|
+
const _previousPointer = new Vector2();
|
|
15
17
|
const _intersection = new Vector3();
|
|
16
18
|
const _worldPosition = new Vector3();
|
|
17
19
|
const _inverseMatrix = new Matrix4();
|
|
18
20
|
|
|
21
|
+
const _up = new Vector3();
|
|
22
|
+
const _right = new Vector3();
|
|
23
|
+
|
|
19
24
|
class DragControls extends EventDispatcher {
|
|
20
25
|
|
|
21
26
|
constructor( _objects, _camera, _domElement ) {
|
|
@@ -28,6 +33,10 @@ class DragControls extends EventDispatcher {
|
|
|
28
33
|
|
|
29
34
|
const _intersections = [];
|
|
30
35
|
|
|
36
|
+
this.mode = 'translate';
|
|
37
|
+
|
|
38
|
+
this.rotateSpeed = 1;
|
|
39
|
+
|
|
31
40
|
//
|
|
32
41
|
|
|
33
42
|
const scope = this;
|
|
@@ -64,6 +73,12 @@ class DragControls extends EventDispatcher {
|
|
|
64
73
|
|
|
65
74
|
}
|
|
66
75
|
|
|
76
|
+
function setObjects( objects ) {
|
|
77
|
+
|
|
78
|
+
_objects = objects;
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
|
|
67
82
|
function getRaycaster() {
|
|
68
83
|
|
|
69
84
|
return _raycaster;
|
|
@@ -80,59 +95,71 @@ class DragControls extends EventDispatcher {
|
|
|
80
95
|
|
|
81
96
|
if ( _selected ) {
|
|
82
97
|
|
|
83
|
-
if (
|
|
98
|
+
if ( scope.mode === 'translate' ) {
|
|
84
99
|
|
|
85
|
-
|
|
100
|
+
if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {
|
|
101
|
+
|
|
102
|
+
_selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) );
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
} else if ( scope.mode === 'rotate' ) {
|
|
107
|
+
|
|
108
|
+
_diff.subVectors( _pointer, _previousPointer ).multiplyScalar( scope.rotateSpeed );
|
|
109
|
+
_selected.rotateOnWorldAxis( _up, _diff.x );
|
|
110
|
+
_selected.rotateOnWorldAxis( _right.normalize(), - _diff.y );
|
|
86
111
|
|
|
87
112
|
}
|
|
88
113
|
|
|
89
114
|
scope.dispatchEvent( { type: 'drag', object: _selected } );
|
|
90
115
|
|
|
91
|
-
|
|
116
|
+
_previousPointer.copy( _pointer );
|
|
92
117
|
|
|
93
|
-
}
|
|
118
|
+
} else {
|
|
94
119
|
|
|
95
|
-
|
|
120
|
+
// hover support
|
|
96
121
|
|
|
97
|
-
|
|
122
|
+
if ( event.pointerType === 'mouse' || event.pointerType === 'pen' ) {
|
|
98
123
|
|
|
99
|
-
|
|
124
|
+
_intersections.length = 0;
|
|
100
125
|
|
|
101
|
-
|
|
102
|
-
|
|
126
|
+
_raycaster.setFromCamera( _pointer, _camera );
|
|
127
|
+
_raycaster.intersectObjects( _objects, scope.recursive, _intersections );
|
|
103
128
|
|
|
104
|
-
|
|
129
|
+
if ( _intersections.length > 0 ) {
|
|
105
130
|
|
|
106
|
-
|
|
131
|
+
const object = _intersections[ 0 ].object;
|
|
107
132
|
|
|
108
|
-
|
|
133
|
+
_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( object.matrixWorld ) );
|
|
109
134
|
|
|
110
|
-
|
|
135
|
+
if ( _hovered !== object && _hovered !== null ) {
|
|
111
136
|
|
|
112
|
-
|
|
137
|
+
scope.dispatchEvent( { type: 'hoveroff', object: _hovered } );
|
|
113
138
|
|
|
114
|
-
|
|
115
|
-
|
|
139
|
+
_domElement.style.cursor = 'auto';
|
|
140
|
+
_hovered = null;
|
|
116
141
|
|
|
117
|
-
|
|
142
|
+
}
|
|
118
143
|
|
|
119
|
-
|
|
144
|
+
if ( _hovered !== object ) {
|
|
120
145
|
|
|
121
|
-
|
|
146
|
+
scope.dispatchEvent( { type: 'hoveron', object: object } );
|
|
122
147
|
|
|
123
|
-
|
|
124
|
-
|
|
148
|
+
_domElement.style.cursor = 'pointer';
|
|
149
|
+
_hovered = object;
|
|
125
150
|
|
|
126
|
-
|
|
151
|
+
}
|
|
127
152
|
|
|
128
|
-
|
|
153
|
+
} else {
|
|
129
154
|
|
|
130
|
-
|
|
155
|
+
if ( _hovered !== null ) {
|
|
131
156
|
|
|
132
|
-
|
|
157
|
+
scope.dispatchEvent( { type: 'hoveroff', object: _hovered } );
|
|
133
158
|
|
|
134
|
-
|
|
135
|
-
|
|
159
|
+
_domElement.style.cursor = 'auto';
|
|
160
|
+
_hovered = null;
|
|
161
|
+
|
|
162
|
+
}
|
|
136
163
|
|
|
137
164
|
}
|
|
138
165
|
|
|
@@ -140,6 +167,8 @@ class DragControls extends EventDispatcher {
|
|
|
140
167
|
|
|
141
168
|
}
|
|
142
169
|
|
|
170
|
+
_previousPointer.copy( _pointer );
|
|
171
|
+
|
|
143
172
|
}
|
|
144
173
|
|
|
145
174
|
function onPointerDown( event ) {
|
|
@@ -155,14 +184,34 @@ class DragControls extends EventDispatcher {
|
|
|
155
184
|
|
|
156
185
|
if ( _intersections.length > 0 ) {
|
|
157
186
|
|
|
158
|
-
|
|
187
|
+
if ( scope.transformGroup === true ) {
|
|
188
|
+
|
|
189
|
+
// look for the outermost group in the object's upper hierarchy
|
|
190
|
+
|
|
191
|
+
_selected = findGroup( _intersections[ 0 ].object );
|
|
192
|
+
|
|
193
|
+
} else {
|
|
194
|
+
|
|
195
|
+
_selected = _intersections[ 0 ].object;
|
|
196
|
+
|
|
197
|
+
}
|
|
159
198
|
|
|
160
199
|
_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );
|
|
161
200
|
|
|
162
201
|
if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {
|
|
163
202
|
|
|
164
|
-
|
|
165
|
-
|
|
203
|
+
if ( scope.mode === 'translate' ) {
|
|
204
|
+
|
|
205
|
+
_inverseMatrix.copy( _selected.parent.matrixWorld ).invert();
|
|
206
|
+
_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );
|
|
207
|
+
|
|
208
|
+
} else if ( scope.mode === 'rotate' ) {
|
|
209
|
+
|
|
210
|
+
// the controls only support Y+ up
|
|
211
|
+
_up.set( 0, 1, 0 ).applyQuaternion( _camera.quaternion ).normalize();
|
|
212
|
+
_right.set( 1, 0, 0 ).applyQuaternion( _camera.quaternion ).normalize();
|
|
213
|
+
|
|
214
|
+
}
|
|
166
215
|
|
|
167
216
|
}
|
|
168
217
|
|
|
@@ -172,6 +221,7 @@ class DragControls extends EventDispatcher {
|
|
|
172
221
|
|
|
173
222
|
}
|
|
174
223
|
|
|
224
|
+
_previousPointer.copy( _pointer );
|
|
175
225
|
|
|
176
226
|
}
|
|
177
227
|
|
|
@@ -200,6 +250,16 @@ class DragControls extends EventDispatcher {
|
|
|
200
250
|
|
|
201
251
|
}
|
|
202
252
|
|
|
253
|
+
function findGroup( obj, group = null ) {
|
|
254
|
+
|
|
255
|
+
if ( obj.isGroup ) group = obj;
|
|
256
|
+
|
|
257
|
+
if ( obj.parent === null ) return group;
|
|
258
|
+
|
|
259
|
+
return findGroup( obj.parent, group );
|
|
260
|
+
|
|
261
|
+
}
|
|
262
|
+
|
|
203
263
|
activate();
|
|
204
264
|
|
|
205
265
|
// API
|
|
@@ -213,6 +273,7 @@ class DragControls extends EventDispatcher {
|
|
|
213
273
|
this.dispose = dispose;
|
|
214
274
|
this.getObjects = getObjects;
|
|
215
275
|
this.getRaycaster = getRaycaster;
|
|
276
|
+
this.setObjects = setObjects;
|
|
216
277
|
|
|
217
278
|
}
|
|
218
279
|
|
|
@@ -261,6 +261,7 @@ class OrbitControls extends EventDispatcher {
|
|
|
261
261
|
scope.target.clampLength( scope.minTargetRadius, scope.maxTargetRadius );
|
|
262
262
|
scope.target.add( scope.cursor );
|
|
263
263
|
|
|
264
|
+
let zoomChanged = false;
|
|
264
265
|
// adjust the camera position based on zoom only if we're not zooming to the cursor or if it's an ortho camera
|
|
265
266
|
// we adjust zoom later in these cases
|
|
266
267
|
if ( scope.zoomToCursor && performCursorZoom || scope.object.isOrthographicCamera ) {
|
|
@@ -269,7 +270,9 @@ class OrbitControls extends EventDispatcher {
|
|
|
269
270
|
|
|
270
271
|
} else {
|
|
271
272
|
|
|
273
|
+
const prevRadius = spherical.radius;
|
|
272
274
|
spherical.radius = clampDistance( spherical.radius * scale );
|
|
275
|
+
zoomChanged = prevRadius != spherical.radius;
|
|
273
276
|
|
|
274
277
|
}
|
|
275
278
|
|
|
@@ -298,7 +301,6 @@ class OrbitControls extends EventDispatcher {
|
|
|
298
301
|
}
|
|
299
302
|
|
|
300
303
|
// adjust camera position
|
|
301
|
-
let zoomChanged = false;
|
|
302
304
|
if ( scope.zoomToCursor && performCursorZoom ) {
|
|
303
305
|
|
|
304
306
|
let newRadius = null;
|
|
@@ -313,15 +315,19 @@ class OrbitControls extends EventDispatcher {
|
|
|
313
315
|
scope.object.position.addScaledVector( dollyDirection, radiusDelta );
|
|
314
316
|
scope.object.updateMatrixWorld();
|
|
315
317
|
|
|
318
|
+
zoomChanged = !! radiusDelta;
|
|
319
|
+
|
|
316
320
|
} else if ( scope.object.isOrthographicCamera ) {
|
|
317
321
|
|
|
318
322
|
// adjust the ortho camera position based on zoom changes
|
|
319
323
|
const mouseBefore = new Vector3( mouse.x, mouse.y, 0 );
|
|
320
324
|
mouseBefore.unproject( scope.object );
|
|
321
325
|
|
|
326
|
+
const prevZoom = scope.object.zoom;
|
|
322
327
|
scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / scale ) );
|
|
323
328
|
scope.object.updateProjectionMatrix();
|
|
324
|
-
|
|
329
|
+
|
|
330
|
+
zoomChanged = prevZoom !== scope.object.zoom;
|
|
325
331
|
|
|
326
332
|
const mouseAfter = new Vector3( mouse.x, mouse.y, 0 );
|
|
327
333
|
mouseAfter.unproject( scope.object );
|
|
@@ -374,12 +380,13 @@ class OrbitControls extends EventDispatcher {
|
|
|
374
380
|
|
|
375
381
|
} else if ( scope.object.isOrthographicCamera ) {
|
|
376
382
|
|
|
377
|
-
|
|
383
|
+
const prevZoom = scope.object.zoom;
|
|
384
|
+
scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / scale ) );
|
|
378
385
|
|
|
379
|
-
if (
|
|
386
|
+
if ( prevZoom !== scope.object.zoom ) {
|
|
380
387
|
|
|
381
|
-
scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / scale ) );
|
|
382
388
|
scope.object.updateProjectionMatrix();
|
|
389
|
+
zoomChanged = true;
|
|
383
390
|
|
|
384
391
|
}
|
|
385
392
|
|
|
@@ -395,7 +402,7 @@ class OrbitControls extends EventDispatcher {
|
|
|
395
402
|
if ( zoomChanged ||
|
|
396
403
|
lastPosition.distanceToSquared( scope.object.position ) > EPS ||
|
|
397
404
|
8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ||
|
|
398
|
-
lastTargetPosition.distanceToSquared( scope.target ) >
|
|
405
|
+
lastTargetPosition.distanceToSquared( scope.target ) > EPS ) {
|
|
399
406
|
|
|
400
407
|
scope.dispatchEvent( _changeEvent );
|
|
401
408
|
|
|
@@ -424,6 +431,9 @@ class OrbitControls extends EventDispatcher {
|
|
|
424
431
|
scope.domElement.removeEventListener( 'pointermove', onPointerMove );
|
|
425
432
|
scope.domElement.removeEventListener( 'pointerup', onPointerUp );
|
|
426
433
|
|
|
434
|
+
const document = scope.domElement.getRootNode(); // offscreen canvas compatibility
|
|
435
|
+
|
|
436
|
+
document.removeEventListener( 'keydown', interceptControlDown, { capture: true } );
|
|
427
437
|
|
|
428
438
|
if ( scope._domElementKeyEvents !== null ) {
|
|
429
439
|
|
|
@@ -1013,6 +1023,10 @@ class OrbitControls extends EventDispatcher {
|
|
|
1013
1023
|
|
|
1014
1024
|
//
|
|
1015
1025
|
|
|
1026
|
+
if ( isTrackingPointer( event ) ) return;
|
|
1027
|
+
|
|
1028
|
+
//
|
|
1029
|
+
|
|
1016
1030
|
addPointer( event );
|
|
1017
1031
|
|
|
1018
1032
|
if ( event.pointerType === 'touch' ) {
|
|
@@ -1460,6 +1474,18 @@ class OrbitControls extends EventDispatcher {
|
|
|
1460
1474
|
|
|
1461
1475
|
}
|
|
1462
1476
|
|
|
1477
|
+
function isTrackingPointer( event ) {
|
|
1478
|
+
|
|
1479
|
+
for ( let i = 0; i < pointers.length; i ++ ) {
|
|
1480
|
+
|
|
1481
|
+
if ( pointers[ i ] == event.pointerId ) return true;
|
|
1482
|
+
|
|
1483
|
+
}
|
|
1484
|
+
|
|
1485
|
+
return false;
|
|
1486
|
+
|
|
1487
|
+
}
|
|
1488
|
+
|
|
1463
1489
|
function trackPointer( event ) {
|
|
1464
1490
|
|
|
1465
1491
|
let position = pointerPositions[ event.pointerId ];
|
|
@@ -178,8 +178,8 @@ class TransformControls extends Object3D {
|
|
|
178
178
|
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
// updateMatrixWorld
|
|
182
|
-
updateMatrixWorld() {
|
|
181
|
+
// updateMatrixWorld updates key transformation variables
|
|
182
|
+
updateMatrixWorld( force ) {
|
|
183
183
|
|
|
184
184
|
if ( this.object !== undefined ) {
|
|
185
185
|
|
|
@@ -215,7 +215,7 @@ class TransformControls extends Object3D {
|
|
|
215
215
|
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
-
super.updateMatrixWorld(
|
|
218
|
+
super.updateMatrixWorld( force );
|
|
219
219
|
|
|
220
220
|
}
|
|
221
221
|
|
|
@@ -223,7 +223,7 @@ class TransformControls extends Object3D {
|
|
|
223
223
|
|
|
224
224
|
if ( this.object === undefined || this.dragging === true ) return;
|
|
225
225
|
|
|
226
|
-
_raycaster.setFromCamera( pointer, this.camera );
|
|
226
|
+
if ( pointer !== null ) _raycaster.setFromCamera( pointer, this.camera );
|
|
227
227
|
|
|
228
228
|
const intersect = intersectObjectWithRay( this._gizmo.picker[ this.mode ], _raycaster );
|
|
229
229
|
|
|
@@ -241,11 +241,11 @@ class TransformControls extends Object3D {
|
|
|
241
241
|
|
|
242
242
|
pointerDown( pointer ) {
|
|
243
243
|
|
|
244
|
-
if ( this.object === undefined || this.dragging === true || pointer.button !== 0 ) return;
|
|
244
|
+
if ( this.object === undefined || this.dragging === true || ( pointer != null && pointer.button !== 0 ) ) return;
|
|
245
245
|
|
|
246
246
|
if ( this.axis !== null ) {
|
|
247
247
|
|
|
248
|
-
_raycaster.setFromCamera( pointer, this.camera );
|
|
248
|
+
if ( pointer !== null ) _raycaster.setFromCamera( pointer, this.camera );
|
|
249
249
|
|
|
250
250
|
const planeIntersect = intersectObjectWithRay( this._plane, _raycaster, true );
|
|
251
251
|
|
|
@@ -289,9 +289,9 @@ class TransformControls extends Object3D {
|
|
|
289
289
|
|
|
290
290
|
}
|
|
291
291
|
|
|
292
|
-
if ( object === undefined || axis === null || this.dragging === false || pointer.button !== - 1 ) return;
|
|
292
|
+
if ( object === undefined || axis === null || this.dragging === false || ( pointer !== null && pointer.button !== - 1 ) ) return;
|
|
293
293
|
|
|
294
|
-
_raycaster.setFromCamera( pointer, this.camera );
|
|
294
|
+
if ( pointer !== null ) _raycaster.setFromCamera( pointer, this.camera );
|
|
295
295
|
|
|
296
296
|
const planeIntersect = intersectObjectWithRay( this._plane, _raycaster, true );
|
|
297
297
|
|
|
@@ -539,7 +539,7 @@ class TransformControls extends Object3D {
|
|
|
539
539
|
|
|
540
540
|
pointerUp( pointer ) {
|
|
541
541
|
|
|
542
|
-
if ( pointer.button !== 0 ) return;
|
|
542
|
+
if ( pointer !== null && pointer.button !== 0 ) return;
|
|
543
543
|
|
|
544
544
|
if ( this.dragging && ( this.axis !== null ) ) {
|
|
545
545
|
|
|
@@ -982,7 +982,17 @@ class GLTFWriter {
|
|
|
982
982
|
|
|
983
983
|
}
|
|
984
984
|
|
|
985
|
-
|
|
985
|
+
let byteStride = attribute.itemSize * componentSize;
|
|
986
|
+
|
|
987
|
+
if ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {
|
|
988
|
+
|
|
989
|
+
// Each element of a vertex attribute MUST be aligned to 4-byte boundaries
|
|
990
|
+
// inside a bufferView
|
|
991
|
+
byteStride = Math.ceil( byteStride / 4 ) * 4;
|
|
992
|
+
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
const byteLength = getPaddedBufferSize( count * byteStride );
|
|
986
996
|
const dataView = new DataView( new ArrayBuffer( byteLength ) );
|
|
987
997
|
let offset = 0;
|
|
988
998
|
|
|
@@ -1047,6 +1057,12 @@ class GLTFWriter {
|
|
|
1047
1057
|
|
|
1048
1058
|
}
|
|
1049
1059
|
|
|
1060
|
+
if ( ( offset % byteStride ) !== 0 ) {
|
|
1061
|
+
|
|
1062
|
+
offset += byteStride - ( offset % byteStride );
|
|
1063
|
+
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1050
1066
|
}
|
|
1051
1067
|
|
|
1052
1068
|
const bufferViewDef = {
|
|
@@ -1062,7 +1078,7 @@ class GLTFWriter {
|
|
|
1062
1078
|
if ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {
|
|
1063
1079
|
|
|
1064
1080
|
// Only define byteStride for vertex attributes.
|
|
1065
|
-
bufferViewDef.byteStride =
|
|
1081
|
+
bufferViewDef.byteStride = byteStride;
|
|
1066
1082
|
|
|
1067
1083
|
}
|
|
1068
1084
|
|
|
@@ -1288,7 +1304,18 @@ class GLTFWriter {
|
|
|
1288
1304
|
|
|
1289
1305
|
} else {
|
|
1290
1306
|
|
|
1291
|
-
|
|
1307
|
+
if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||
|
|
1308
|
+
( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||
|
|
1309
|
+
( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ||
|
|
1310
|
+
( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ) {
|
|
1311
|
+
|
|
1312
|
+
ctx.drawImage( image, 0, 0, canvas.width, canvas.height );
|
|
1313
|
+
|
|
1314
|
+
} else {
|
|
1315
|
+
|
|
1316
|
+
throw new Error( 'THREE.GLTFExporter: Invalid image type. Use HTMLImageElement, HTMLCanvasElement, ImageBitmap or OffscreenCanvas.' );
|
|
1317
|
+
|
|
1318
|
+
}
|
|
1292
1319
|
|
|
1293
1320
|
}
|
|
1294
1321
|
|
|
@@ -409,6 +409,21 @@ function buildPrimvars( attributes ) {
|
|
|
409
409
|
|
|
410
410
|
}
|
|
411
411
|
|
|
412
|
+
// vertex colors
|
|
413
|
+
|
|
414
|
+
const colorAttribute = attributes.color;
|
|
415
|
+
|
|
416
|
+
if ( colorAttribute !== undefined ) {
|
|
417
|
+
|
|
418
|
+
const count = colorAttribute.count;
|
|
419
|
+
|
|
420
|
+
string += `
|
|
421
|
+
color3f[] primvars:displayColor = [${buildVector3Array( colorAttribute, count )}] (
|
|
422
|
+
interpolation = "vertex"
|
|
423
|
+
)`;
|
|
424
|
+
|
|
425
|
+
}
|
|
426
|
+
|
|
412
427
|
return string;
|
|
413
428
|
|
|
414
429
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* font: <THREE.Font>, // font
|
|
6
6
|
*
|
|
7
7
|
* size: <float>, // size of the text
|
|
8
|
-
*
|
|
8
|
+
* depth: <float>, // thickness to extrude text
|
|
9
9
|
* curveSegments: <int>, // number of points on the curves
|
|
10
10
|
*
|
|
11
11
|
* bevelEnabled: <bool>, // turn on bevel
|
|
@@ -35,7 +35,15 @@ class TextGeometry extends ExtrudeGeometry {
|
|
|
35
35
|
|
|
36
36
|
// translate parameters to ExtrudeGeometry API
|
|
37
37
|
|
|
38
|
-
parameters.depth
|
|
38
|
+
if ( parameters.depth === undefined && parameters.height !== undefined ) {
|
|
39
|
+
|
|
40
|
+
console.warn( 'THREE.TextGeometry: .height is now depreciated. Please use .depth instead' ); // @deprecated, r163
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
parameters.depth = parameters.depth !== undefined ?
|
|
45
|
+
parameters.depth : parameters.height !== undefined ?
|
|
46
|
+
parameters.height : 50;
|
|
39
47
|
|
|
40
48
|
// defaults
|
|
41
49
|
|
|
@@ -241,6 +241,13 @@ function html2canvas( element ) {
|
|
|
241
241
|
|
|
242
242
|
function drawElement( element, style ) {
|
|
243
243
|
|
|
244
|
+
// Do not render invisible elements, comments and scripts.
|
|
245
|
+
if ( element.nodeType === Node.COMMENT_NODE || element.nodeName === 'SCRIPT' || ( element.style && element.style.display === 'none' ) ) {
|
|
246
|
+
|
|
247
|
+
return;
|
|
248
|
+
|
|
249
|
+
}
|
|
250
|
+
|
|
244
251
|
let x = 0, y = 0, width = 0, height = 0;
|
|
245
252
|
|
|
246
253
|
if ( element.nodeType === Node.TEXT_NODE ) {
|
|
@@ -258,14 +265,9 @@ function html2canvas( element ) {
|
|
|
258
265
|
|
|
259
266
|
drawText( style, x, y, element.nodeValue.trim() );
|
|
260
267
|
|
|
261
|
-
} else if ( element.nodeType === Node.COMMENT_NODE ) {
|
|
262
|
-
|
|
263
|
-
return;
|
|
264
|
-
|
|
265
268
|
} else if ( element instanceof HTMLCanvasElement ) {
|
|
266
269
|
|
|
267
270
|
// Canvas element
|
|
268
|
-
if ( element.style.display === 'none' ) return;
|
|
269
271
|
|
|
270
272
|
const rect = element.getBoundingClientRect();
|
|
271
273
|
|
|
@@ -280,8 +282,6 @@ function html2canvas( element ) {
|
|
|
280
282
|
|
|
281
283
|
} else if ( element instanceof HTMLImageElement ) {
|
|
282
284
|
|
|
283
|
-
if ( element.style.display === 'none' ) return;
|
|
284
|
-
|
|
285
285
|
const rect = element.getBoundingClientRect();
|
|
286
286
|
|
|
287
287
|
x = rect.left - offset.left - 0.5;
|
|
@@ -293,8 +293,6 @@ function html2canvas( element ) {
|
|
|
293
293
|
|
|
294
294
|
} else {
|
|
295
295
|
|
|
296
|
-
if ( element.style.display === 'none' ) return;
|
|
297
|
-
|
|
298
296
|
const rect = element.getBoundingClientRect();
|
|
299
297
|
|
|
300
298
|
x = rect.left - offset.left - 0.5;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Group,
|
|
3
|
-
Matrix4,
|
|
4
3
|
Raycaster,
|
|
5
4
|
Vector2
|
|
6
5
|
} from 'three';
|
|
@@ -8,18 +7,14 @@ import {
|
|
|
8
7
|
const _pointer = new Vector2();
|
|
9
8
|
const _event = { type: '', data: _pointer };
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
const _raycaster = new Raycaster();
|
|
12
11
|
|
|
13
|
-
|
|
12
|
+
class InteractiveGroup extends Group {
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
listenToPointerEvents( renderer, camera ) {
|
|
16
15
|
|
|
17
16
|
const scope = this;
|
|
18
|
-
|
|
19
17
|
const raycaster = new Raycaster();
|
|
20
|
-
const tempMatrix = new Matrix4();
|
|
21
|
-
|
|
22
|
-
// Pointer Events
|
|
23
18
|
|
|
24
19
|
const element = renderer.domElement;
|
|
25
20
|
|
|
@@ -60,7 +55,12 @@ class InteractiveGroup extends Group {
|
|
|
60
55
|
element.addEventListener( 'mousemove', onPointerEvent );
|
|
61
56
|
element.addEventListener( 'click', onPointerEvent );
|
|
62
57
|
|
|
63
|
-
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
listenToXRControllerEvents( controller ) {
|
|
61
|
+
|
|
62
|
+
const scope = this;
|
|
63
|
+
|
|
64
64
|
// TODO: Dispatch pointerevents too
|
|
65
65
|
|
|
66
66
|
const events = {
|
|
@@ -74,12 +74,9 @@ class InteractiveGroup extends Group {
|
|
|
74
74
|
|
|
75
75
|
const controller = event.target;
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
raycaster.ray.origin.setFromMatrixPosition( controller.matrixWorld );
|
|
80
|
-
raycaster.ray.direction.set( 0, 0, - 1 ).applyMatrix4( tempMatrix );
|
|
77
|
+
_raycaster.setFromXRController( controller );
|
|
81
78
|
|
|
82
|
-
const intersections =
|
|
79
|
+
const intersections = _raycaster.intersectObjects( scope.children, false );
|
|
83
80
|
|
|
84
81
|
if ( intersections.length > 0 ) {
|
|
85
82
|
|
|
@@ -97,17 +94,10 @@ class InteractiveGroup extends Group {
|
|
|
97
94
|
|
|
98
95
|
}
|
|
99
96
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
controller1.addEventListener( 'selectend', onXRControllerEvent );
|
|
105
|
-
|
|
106
|
-
const controller2 = renderer.xr.getController( 1 );
|
|
107
|
-
controller2.addEventListener( 'move', onXRControllerEvent );
|
|
108
|
-
controller2.addEventListener( 'select', onXRControllerEvent );
|
|
109
|
-
controller2.addEventListener( 'selectstart', onXRControllerEvent );
|
|
110
|
-
controller2.addEventListener( 'selectend', onXRControllerEvent );
|
|
97
|
+
controller.addEventListener( 'move', onXRControllerEvent );
|
|
98
|
+
controller.addEventListener( 'select', onXRControllerEvent );
|
|
99
|
+
controller.addEventListener( 'selectstart', onXRControllerEvent );
|
|
100
|
+
controller.addEventListener( 'selectend', onXRControllerEvent );
|
|
111
101
|
|
|
112
102
|
}
|
|
113
103
|
|