three-base 2.0.19 → 2.0.21

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/ThreeBase.js CHANGED
@@ -5,7 +5,7 @@
5
5
  * @Last Modified time: 2023-05-23 23:54:13
6
6
  */
7
7
  import { round } from "lodash";
8
- import { AxesHelper, DepthFormat, DepthTexture, DisplayP3ColorSpace, EventDispatcher, GridHelper, LinearFilter, Mesh, MOUSE, NoBlending, NormalBlending, PerspectiveCamera, RGBAFormat, Scene, TOUCH, UnsignedShortType, Vector2, Vector3, WebGLRenderer, WebGLRenderTarget } from "three";
8
+ import { AxesHelper, DepthFormat, DepthTexture, EventDispatcher, GridHelper, LinearFilter, Mesh, MOUSE, NoBlending, NormalBlending, PerspectiveCamera, RGBAFormat, Scene, TOUCH, UnsignedShortType, Vector2, Vector3, WebGLRenderer, WebGLRenderTarget } from "three";
9
9
  import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
10
10
  import { generateUUID } from "three/src/math/MathUtils";
11
11
  import { clearShader, coptyShader, fullScreenMesh, gaussBlurShader, strokeShader } from "./shaders";
@@ -31,19 +31,17 @@ export default class ThreeBase extends EventDispatcher {
31
31
  })();
32
32
  // TODO 渲染目标的颜色空间问题 还没有处理好
33
33
  // 基础纹理渲染对象
34
- baseRenderTarget = new WebGLRenderTarget(128, 128, {
35
- minFilter: LinearFilter,
36
- magFilter: LinearFilter,
37
- format: RGBAFormat,
38
- stencilBuffer: false,
39
- depthTexture: this.baseDepthTexture,
40
- anisotropy: 16,
41
- colorSpace: DisplayP3ColorSpace
42
- // | typeof NoColorSpace
43
- // | typeof SRGBColorSpace
44
- // | typeof LinearSRGBColorSpace
45
- // | typeof DisplayP3ColorSpace;
46
- });
34
+ baseRenderTarget = (() => {
35
+ const baseRenderTarget = new WebGLRenderTarget(128, 128, {
36
+ minFilter: LinearFilter,
37
+ magFilter: LinearFilter,
38
+ format: RGBAFormat,
39
+ stencilBuffer: false,
40
+ depthTexture: this.baseDepthTexture,
41
+ anisotropy: 16,
42
+ });
43
+ return baseRenderTarget;
44
+ })();
47
45
  // 公用渲染目标1
48
46
  renderTarget = new WebGLRenderTarget(128, 128, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
49
47
  // 渲染目标2
@@ -91,22 +89,17 @@ export default class ThreeBase extends EventDispatcher {
91
89
  controls.screenSpacePanning = true;
92
90
  return controls;
93
91
  })();
94
- // 上下文是否被销毁了
95
- isRendererContextLost = false;
96
92
  // 设置 dom 容器
97
93
  async setContainer(div) {
98
94
  if (div) {
99
95
  div.style.overflow = "hidden";
100
96
  div.innerHTML = "";
101
97
  div.append(this.renderer.domElement);
102
- // 如果上下文被销毁了, 就恢复上下文
103
- if (this.isRendererContextLost) {
104
- this.isRendererContextLost = false;
105
- this.renderer.forceContextRestore();
106
- await new Promise(resolve => requestAnimationFrame(resolve));
107
- await new Promise(resolve => requestAnimationFrame(resolve));
108
- this.renderer.domElement.style.opacity = "1";
109
- }
98
+ // this.renderer.forceContextLoss();
99
+ // await new Promise(resolve => requestAnimationFrame(resolve));
100
+ // await new Promise(resolve => requestAnimationFrame(resolve));
101
+ this.renderer.forceContextRestore();
102
+ this.renderer.domElement.style.opacity = "1";
110
103
  this.setSize(div.clientWidth, div.clientHeight);
111
104
  // 开启时时渲染
112
105
  threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
@@ -121,7 +114,7 @@ export default class ThreeBase extends EventDispatcher {
121
114
  }
122
115
  this.renderer.setPixelRatio(window.devicePixelRatio);
123
116
  this.renderer.setSize(width, height);
124
- this.baseRenderTarget.setSize(width, height);
117
+ this.baseRenderTarget.setSize(width * window.devicePixelRatio, height * window.devicePixelRatio);
125
118
  this.size.set(width, height);
126
119
  // 渲染场景
127
120
  // this.renderer.clear();
@@ -149,11 +142,24 @@ export default class ThreeBase extends EventDispatcher {
149
142
  const controlsPosition = new Transition({ x: 100, y: 100, z: 100 });
150
143
  controlsPosition.setDuration(1000);
151
144
  controlsPosition.onChange(({ x, y, z }) => {
152
- // const distance = this.controlsDistance.get("distance");
153
- this.camera.position.set(x, y, z);
154
- // .sub(this.controls.target)
155
- // .setLength(distance)
156
- // .add(this.controls.target);
145
+ const distance = this.controlsDistance.get("distance");
146
+ this.camera.position.set(x + 0.01, y, z + 0.01)
147
+ .sub(this.controls.target)
148
+ .setLength(distance)
149
+ .add(this.controls.target);
150
+ // // 创建初始方向向量
151
+ // const directionVecA = new THREE.Vector3(1, 0, 0); // 需要旋转的初始方向向量
152
+ // const referenceVecB = new THREE.Vector3(0, 1, 0); // 参考方向向量,用于确定旋转轴
153
+ // // 归一化参考方向向量
154
+ // referenceVecB.normalize();
155
+ // // 计算旋转轴
156
+ // const axis = new THREE.Vector3().crossVectors(directionVecA, referenceVecB).normalize();
157
+ // // 计算旋转角度(弧度)
158
+ // const angle = Math.PI / 36; // 旋转角度为5度,Math.PI / 36为弧度
159
+ // // 使用applyAxisAngle方法进行旋转
160
+ // directionVecA.applyAxisAngle(axis, angle);
161
+ // // 输出旋转后的方向向量
162
+ // console.log(directionVecA);
157
163
  this.camera.lookAt(this.controls.target);
158
164
  this.needRender = true;
159
165
  });
@@ -162,15 +168,17 @@ export default class ThreeBase extends EventDispatcher {
162
168
  // 网格辅助线
163
169
  gridHelper = (() => {
164
170
  const gridHelper = new GridHelper(1000, 100, 0x303030, 0x303030);
165
- gridHelper.visible = threeUtils.isDev;
166
- this.scene.add(gridHelper);
171
+ if (threeUtils.isDev) {
172
+ this.scene.add(gridHelper);
173
+ }
167
174
  return gridHelper;
168
175
  })();
169
176
  //坐标轴线
170
177
  axesHelper = (() => {
171
178
  const axesHelper = new AxesHelper(10000);
172
- axesHelper.visible = threeUtils.isDev;
173
- this.scene.add(axesHelper);
179
+ if (threeUtils.isDev) {
180
+ this.scene.add(axesHelper);
181
+ }
174
182
  return axesHelper;
175
183
  })();
176
184
  init() {
@@ -266,8 +274,6 @@ export default class ThreeBase extends EventDispatcher {
266
274
  stopRender() {
267
275
  threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
268
276
  this.renderer.forceContextLoss();
269
- // 标记上下文被销毁了
270
- this.isRendererContextLost = true;
271
277
  this.setSize(100, 100);
272
278
  this.renderer.domElement.style.opacity = "0";
273
279
  }
@@ -297,17 +303,17 @@ export default class ThreeBase extends EventDispatcher {
297
303
  }
298
304
  // 渲染场景
299
305
  this.dispatchEvent({ type: "beforeRender" });
300
- this.renderer.setRenderTarget(this.baseRenderTarget);
306
+ // this.renderer.setRenderTarget(this.baseRenderTarget);
301
307
  this.renderer.clear();
302
308
  this.renderer.render(this.scene, this.camera);
303
- this.renderer.setRenderTarget(null);
304
- this.renderer.clear();
309
+ // this.renderer.setRenderTarget(null);
310
+ // this.renderer.clear();
305
311
  //TODO 渲染了2次, 还有优化空间
306
312
  // this.renderer.setScissorTest(false);
307
313
  // this.renderRendererTarget(this.baseRenderTarget);
308
314
  // this.renderer.setScissorTest(true);
309
- // this.renderer.setScissor(0, 0, 512, 1000);
310
- this.renderer.render(this.scene, this.camera);
315
+ // this.renderer.setScissor(0, 0, 800, 1000);
316
+ // this.renderer.render(this.scene, this.camera);
311
317
  // 查找需要绘制描边的对象,并且绘制描边
312
318
  this.scene.traverse(obj => {
313
319
  stroke_pass(this.renderer, this.camera, obj, this.baseDepthTexture);
package/ThreeBase.ts CHANGED
@@ -36,19 +36,17 @@ export default class ThreeBase extends EventDispatcher {
36
36
 
37
37
  // TODO 渲染目标的颜色空间问题 还没有处理好
38
38
  // 基础纹理渲染对象
39
- baseRenderTarget = new WebGLRenderTarget(128, 128, {
40
- minFilter: LinearFilter,
41
- magFilter: LinearFilter,
42
- format: RGBAFormat,
43
- stencilBuffer: false,
44
- depthTexture: this.baseDepthTexture,
45
- anisotropy: 16,
46
- colorSpace: DisplayP3ColorSpace
47
- // | typeof NoColorSpace
48
- // | typeof SRGBColorSpace
49
- // | typeof LinearSRGBColorSpace
50
- // | typeof DisplayP3ColorSpace;
51
- });
39
+ baseRenderTarget = (() => {
40
+ const baseRenderTarget = new WebGLRenderTarget(128, 128, {
41
+ minFilter: LinearFilter,
42
+ magFilter: LinearFilter,
43
+ format: RGBAFormat,
44
+ stencilBuffer: false,
45
+ depthTexture: this.baseDepthTexture,
46
+ anisotropy: 16,
47
+ });
48
+ return baseRenderTarget;
49
+ })();
52
50
 
53
51
  // 公用渲染目标1
54
52
  renderTarget = new WebGLRenderTarget(128, 128, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat });
@@ -108,9 +106,6 @@ export default class ThreeBase extends EventDispatcher {
108
106
  return controls;
109
107
  })();
110
108
 
111
- // 上下文是否被销毁了
112
- isRendererContextLost = false;
113
-
114
109
  // 设置 dom 容器
115
110
  async setContainer(div: HTMLDivElement | null) {
116
111
  if (div) {
@@ -118,14 +113,11 @@ export default class ThreeBase extends EventDispatcher {
118
113
  div.innerHTML = "";
119
114
  div.append(this.renderer.domElement);
120
115
 
121
- // 如果上下文被销毁了, 就恢复上下文
122
- if (this.isRendererContextLost) {
123
- this.isRendererContextLost = false;
124
- this.renderer.forceContextRestore();
125
- await new Promise(resolve => requestAnimationFrame(resolve));
126
- await new Promise(resolve => requestAnimationFrame(resolve));
127
- this.renderer.domElement.style.opacity = "1";
128
- }
116
+ // this.renderer.forceContextLoss();
117
+ // await new Promise(resolve => requestAnimationFrame(resolve));
118
+ // await new Promise(resolve => requestAnimationFrame(resolve));
119
+ this.renderer.forceContextRestore();
120
+ this.renderer.domElement.style.opacity = "1";
129
121
 
130
122
  this.setSize(div.clientWidth, div.clientHeight);
131
123
 
@@ -145,7 +137,7 @@ export default class ThreeBase extends EventDispatcher {
145
137
  this.renderer.setPixelRatio(window.devicePixelRatio);
146
138
  this.renderer.setSize(width, height);
147
139
 
148
- this.baseRenderTarget.setSize(width, height);
140
+ this.baseRenderTarget.setSize(width * window.devicePixelRatio, height * window.devicePixelRatio);
149
141
 
150
142
  this.size.set(width, height);
151
143
  // 渲染场景
@@ -177,11 +169,31 @@ export default class ThreeBase extends EventDispatcher {
177
169
  const controlsPosition = new Transition({ x: 100, y: 100, z: 100 });
178
170
  controlsPosition.setDuration(1000);
179
171
  controlsPosition.onChange(({ x, y, z }) => {
180
- // const distance = this.controlsDistance.get("distance");
181
- this.camera.position.set(x, y, z)
182
- // .sub(this.controls.target)
183
- // .setLength(distance)
184
- // .add(this.controls.target);
172
+ const distance = this.controlsDistance.get("distance");
173
+ this.camera.position.set(x + 0.01, y, z + 0.01)
174
+ .sub(this.controls.target)
175
+ .setLength(distance)
176
+ .add(this.controls.target);
177
+
178
+ // // 创建初始方向向量
179
+ // const directionVecA = new THREE.Vector3(1, 0, 0); // 需要旋转的初始方向向量
180
+ // const referenceVecB = new THREE.Vector3(0, 1, 0); // 参考方向向量,用于确定旋转轴
181
+
182
+ // // 归一化参考方向向量
183
+ // referenceVecB.normalize();
184
+
185
+ // // 计算旋转轴
186
+ // const axis = new THREE.Vector3().crossVectors(directionVecA, referenceVecB).normalize();
187
+
188
+ // // 计算旋转角度(弧度)
189
+ // const angle = Math.PI / 36; // 旋转角度为5度,Math.PI / 36为弧度
190
+
191
+ // // 使用applyAxisAngle方法进行旋转
192
+ // directionVecA.applyAxisAngle(axis, angle);
193
+
194
+ // // 输出旋转后的方向向量
195
+ // console.log(directionVecA);
196
+
185
197
 
186
198
  this.camera.lookAt(this.controls.target);
187
199
  this.needRender = true;
@@ -192,16 +204,18 @@ export default class ThreeBase extends EventDispatcher {
192
204
  // 网格辅助线
193
205
  gridHelper = (() => {
194
206
  const gridHelper = new GridHelper(1000, 100, 0x303030, 0x303030);
195
- gridHelper.visible = threeUtils.isDev;
196
- this.scene.add(gridHelper);
207
+ if (threeUtils.isDev) {
208
+ this.scene.add(gridHelper);
209
+ }
197
210
  return gridHelper;
198
211
  })();
199
212
 
200
213
  //坐标轴线
201
214
  axesHelper = (() => {
202
215
  const axesHelper = new AxesHelper(10000);
203
- axesHelper.visible = threeUtils.isDev;
204
- this.scene.add(axesHelper);
216
+ if (threeUtils.isDev) {
217
+ this.scene.add(axesHelper);
218
+ }
205
219
  return axesHelper;
206
220
  })();
207
221
 
@@ -323,8 +337,6 @@ export default class ThreeBase extends EventDispatcher {
323
337
  stopRender() {
324
338
  threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
325
339
  this.renderer.forceContextLoss();
326
- // 标记上下文被销毁了
327
- this.isRendererContextLost = true;
328
340
  this.setSize(100, 100);
329
341
  this.renderer.domElement.style.opacity = "0";
330
342
  }
@@ -361,23 +373,21 @@ export default class ThreeBase extends EventDispatcher {
361
373
  }
362
374
 
363
375
  // 渲染场景
364
- this.dispatchEvent({ type: "beforeRender" });
376
+ this.dispatchEvent({ type: "beforeRender" } as never);
365
377
 
366
- this.renderer.setRenderTarget(this.baseRenderTarget);
378
+ // this.renderer.setRenderTarget(this.baseRenderTarget);
367
379
  this.renderer.clear();
368
380
  this.renderer.render(this.scene, this.camera);
369
381
 
370
- this.renderer.setRenderTarget(null);
371
- this.renderer.clear();
382
+ // this.renderer.setRenderTarget(null);
383
+ // this.renderer.clear();
372
384
 
373
385
  //TODO 渲染了2次, 还有优化空间
374
386
  // this.renderer.setScissorTest(false);
375
387
  // this.renderRendererTarget(this.baseRenderTarget);
376
388
  // this.renderer.setScissorTest(true);
377
- // this.renderer.setScissor(0, 0, 512, 1000);
378
- this.renderer.render(this.scene, this.camera);
379
-
380
-
389
+ // this.renderer.setScissor(0, 0, 800, 1000);
390
+ // this.renderer.render(this.scene, this.camera);
381
391
 
382
392
  // 查找需要绘制描边的对象,并且绘制描边
383
393
  this.scene.traverse(obj => {
@@ -385,7 +395,7 @@ export default class ThreeBase extends EventDispatcher {
385
395
  glow_pass(this.renderer, this.camera, obj, this.baseDepthTexture);
386
396
  });
387
397
 
388
- this.dispatchEvent({ type: "afterRender" });
398
+ this.dispatchEvent({ type: "afterRender" } as never);
389
399
  }
390
400
 
391
401
  private renderBindThis = this.render.bind(this);
package/ThreeMouse.ts CHANGED
@@ -168,7 +168,7 @@ export default class ThreeMouse {
168
168
  if (this._mesh_on === MouseEvent.object) {
169
169
  if (this.hasEvent(MouseEvent.object, ["mousemove"])) {
170
170
  MouseEvent.type = "mousemove";
171
- MouseEvent.object.dispatchEvent(MouseEvent);
171
+ MouseEvent.object.dispatchEvent(MouseEvent as never);
172
172
  }
173
173
 
174
174
  // 鼠标划入滑出事件
@@ -176,12 +176,12 @@ export default class ThreeMouse {
176
176
 
177
177
  if (this.hasEvent(this._mesh_on, ["mouseleave"])) {
178
178
  MouseEvent.type = "mouseleave";
179
- this._mesh_on!.dispatchEvent(MouseEvent);
179
+ this._mesh_on!.dispatchEvent(MouseEvent as never);
180
180
  }
181
181
 
182
182
  if (this.hasEvent(MouseEvent.object, ["mouseenter"])) {
183
183
  MouseEvent.type = "mouseenter";
184
- MouseEvent.object.dispatchEvent(MouseEvent);
184
+ MouseEvent.object.dispatchEvent(MouseEvent as never);
185
185
  }
186
186
 
187
187
  }
@@ -208,7 +208,7 @@ export default class ThreeMouse {
208
208
  offsetY: this._mousemoveEvent.offsetY,
209
209
  x: this._mousemoveEvent.x,
210
210
  y: this._mousemoveEvent.y
211
- });
211
+ } as never);
212
212
  }
213
213
 
214
214
 
@@ -235,7 +235,7 @@ export default class ThreeMouse {
235
235
  offsetY: this._mousemoveEvent.offsetY,
236
236
  x: this._mousemoveEvent.x,
237
237
  y: this._mousemoveEvent.y
238
- });
238
+ } as never);
239
239
  }
240
240
 
241
241
  // 置空当前鼠标上面的对象
@@ -292,7 +292,7 @@ export default class ThreeMouse {
292
292
  offsetY: this._mousemoveEvent.offsetY,
293
293
  x: this._mousemoveEvent.x,
294
294
  y: this._mousemoveEvent.y
295
- });
295
+ } as never);
296
296
 
297
297
  }
298
298
 
@@ -324,7 +324,7 @@ export default class ThreeMouse {
324
324
  offsetY: this._mousemoveEvent.offsetY,
325
325
  x: this._mousemoveEvent.x,
326
326
  y: this._mousemoveEvent.y
327
- });
327
+ } as never);
328
328
  }
329
329
 
330
330
  // 触发鼠标弹起事件
@@ -356,7 +356,7 @@ export default class ThreeMouse {
356
356
  offsetY: this._mousemoveEvent.offsetY,
357
357
  x: this._mousemoveEvent.x,
358
358
  y: this._mousemoveEvent.y
359
- });
359
+ } as never);
360
360
  }
361
361
 
362
362
  if (this.hasEvent(this._mesh_Down, ["leftclick"]) && (e.button === 0)) {
@@ -370,7 +370,7 @@ export default class ThreeMouse {
370
370
  offsetY: this._mousemoveEvent.offsetY,
371
371
  x: this._mousemoveEvent.x,
372
372
  y: this._mousemoveEvent.y
373
- });
373
+ } as never);
374
374
  }
375
375
 
376
376
  if (this.hasEvent(this._mesh_Down, ["rightclick"]) && (e.button === 2)) {
@@ -384,7 +384,7 @@ export default class ThreeMouse {
384
384
  offsetY: this._mousemoveEvent.offsetY,
385
385
  x: this._mousemoveEvent.x,
386
386
  y: this._mousemoveEvent.y
387
- });
387
+ } as never);
388
388
  }
389
389
 
390
390
  } else if (this._click_num > 1) {
@@ -401,7 +401,7 @@ export default class ThreeMouse {
401
401
  offsetY: this._mousemoveEvent.offsetY,
402
402
  x: this._mousemoveEvent.x,
403
403
  y: this._mousemoveEvent.y
404
- });
404
+ } as never);
405
405
 
406
406
  }
407
407
 
@@ -420,7 +420,7 @@ export default class ThreeMouse {
420
420
  offsetY: this._mousemoveEvent.offsetY,
421
421
  x: this._mousemoveEvent.x,
422
422
  y: this._mousemoveEvent.y
423
- });
423
+ } as never);
424
424
  }
425
425
 
426
426
  if (this.hasEvent(this._mesh_Down, ["leftclick"]) && (e.button === 0)) {
@@ -434,7 +434,7 @@ export default class ThreeMouse {
434
434
  offsetY: this._mousemoveEvent.offsetY,
435
435
  x: this._mousemoveEvent.x,
436
436
  y: this._mousemoveEvent.y
437
- });
437
+ } as never);
438
438
  }
439
439
 
440
440
  if (this.hasEvent(this._mesh_Down, ["rightclick"]) && (e.button === 2)) {
@@ -448,7 +448,7 @@ export default class ThreeMouse {
448
448
  offsetY: this._mousemoveEvent.offsetY,
449
449
  x: this._mousemoveEvent.x,
450
450
  y: this._mousemoveEvent.y
451
- });
451
+ } as never);
452
452
  }
453
453
 
454
454
  }
package/keyContorls.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Event, EventDispatcher, EventListener, Vector3 } from "three";
1
+ import { EventDispatcher, EventListener, Vector3 } from "three";
2
2
  /**
3
3
  * 键盘 使用 ↑↓←→ 控制 x z 方向, 小键盘 1 0 控制 y 方向
4
4
  *
@@ -17,7 +17,7 @@ declare class KeyContorls extends EventDispatcher {
17
17
  [key: string]: Array<any>;
18
18
  };
19
19
  removeEvent: import("lodash").DebouncedFunc<(type: string) => void>;
20
- addEventListener<T extends string>(type: T, listener: EventListener<Event, T, this>): void;
20
+ addEventListener<T extends string>(type: T, listener: EventListener<{}, T, this>): void;
21
21
  addEvent(): void;
22
22
  dispose(): void;
23
23
  }
package/keyContorls.ts CHANGED
@@ -29,17 +29,17 @@ class KeyContorls extends EventDispatcher {
29
29
 
30
30
  // 添加事件需要由外部实现
31
31
  add(e: any) {
32
- this.dispatchEvent({ ...e, type: "add" });
32
+ this.dispatchEvent({ ...e, type: "add" } as never);
33
33
  }
34
34
 
35
35
  // 删除事件
36
36
  delete(e: any) {
37
- this.dispatchEvent({ ...e, type: "delete" });
37
+ this.dispatchEvent({ ...e, type: "delete" } as never);
38
38
  }
39
39
 
40
40
  // 回车按钮
41
41
  enter(e: any) {
42
- this.dispatchEvent({ ...e, type: "enter" });
42
+ this.dispatchEvent({ ...e, type: "enter" } as never);
43
43
  }
44
44
 
45
45
  keyDown = (e: any) => {
@@ -96,7 +96,7 @@ class KeyContorls extends EventDispatcher {
96
96
  this.dispatchEvent({
97
97
  type: "change",
98
98
  direction: this.direction
99
- });
99
+ } as never);
100
100
 
101
101
  }
102
102
 
@@ -107,7 +107,7 @@ class KeyContorls extends EventDispatcher {
107
107
  this._listeners = undefined;
108
108
  }, 1000, { trailing: false });
109
109
 
110
- addEventListener<T extends string>(type: T, listener: EventListener<Event, T, this>): void {
110
+ addEventListener<T extends string>(type: T, listener: EventListener<{}, T, this>): void {
111
111
  this.removeEvent(type);
112
112
  super.addEventListener(type, listener);
113
113
  }
package/package.json CHANGED
@@ -1,7 +1,10 @@
1
1
  {
2
2
  "name": "three-base",
3
- "version": "2.0.19",
3
+ "version": "2.0.21",
4
4
  "description": "three 3d three-base",
5
+ "publishConfig": {
6
+ "registry": "https://registry.npmjs.org/"
7
+ },
5
8
  "repository": {
6
9
  "type": "git",
7
10
  "url": "https://gitee.com/drm/three-base"
@@ -35,7 +38,8 @@
35
38
  "dependencies": {
36
39
  "apng-js": "^1",
37
40
  "lodash": "^4",
38
- "three": "^0.154.0",
41
+ "@types/three": "^0.159.0",
42
+ "three": "^0.159.0",
39
43
  "dexie": "^3",
40
44
  "vite": "*",
41
45
  "html2canvas": "^1.4.1"
@@ -1,7 +1,7 @@
1
1
  import { BufferGeometry, Material, Mesh, OrthographicCamera, Scene, WebGLRenderer } from "three";
2
2
  export default class FullScreenQuad extends Scene {
3
3
  constructor();
4
- mesh: Mesh<BufferGeometry<import("three").NormalBufferAttributes>, Material>;
4
+ mesh: Mesh<BufferGeometry<import("three").NormalBufferAttributes>, Material, import("three").Object3DEventMap>;
5
5
  orthographicCamera: OrthographicCamera;
6
6
  render(renderer: WebGLRenderer, material: Material): void;
7
7
  }
package/pass/glow_pass.js CHANGED
@@ -474,6 +474,7 @@ export default function glow_pass(renderer, camera, object3d, baseDepthTexture)
474
474
  const originRenderTarget = renderer.getRenderTarget();
475
475
  // 设置选中目标的帧缓冲区
476
476
  renderer.getSize(size);
477
+ size.multiplyScalar(window.devicePixelRatio);
477
478
  selectTextureTarget.setSize(size.x, size.y);
478
479
  selectDethpTestTextureTarget.setSize(size.x, size.y);
479
480
  blur1TextureTarget.setSize(size.x, size.y);
package/pass/glow_pass.ts CHANGED
@@ -495,6 +495,7 @@ export default function glow_pass(renderer: WebGLRenderer, camera: Camera, objec
495
495
 
496
496
  // 设置选中目标的帧缓冲区
497
497
  renderer.getSize(size);
498
+ size.multiplyScalar(window.devicePixelRatio);
498
499
  selectTextureTarget.setSize(size.x, size.y);
499
500
  selectDethpTestTextureTarget.setSize(size.x, size.y);
500
501
  blur1TextureTarget.setSize(size.x, size.y);
@@ -470,6 +470,7 @@ export default function stroke_pass(renderer, camera, object3d, baseDepthTexture
470
470
  const originRenderTarget = renderer.getRenderTarget();
471
471
  // 设置选中目标的帧缓冲区
472
472
  renderer.getSize(size);
473
+ size.multiplyScalar(window.devicePixelRatio);
473
474
  selectTextureTarget.setSize(size.x, size.y);
474
475
  selectDethpTestTextureTarget.setSize(size.x, size.y);
475
476
  blur1TextureTarget.setSize(size.x, size.y);
@@ -489,6 +489,7 @@ export default function stroke_pass(renderer: WebGLRenderer, camera: Camera, obj
489
489
 
490
490
  // 设置选中目标的帧缓冲区
491
491
  renderer.getSize(size);
492
+ size.multiplyScalar(window.devicePixelRatio);
492
493
  selectTextureTarget.setSize(size.x, size.y);
493
494
  selectDethpTestTextureTarget.setSize(size.x, size.y);
494
495
  blur1TextureTarget.setSize(size.x, size.y);
package/threeLoader.d.ts CHANGED
@@ -1,17 +1,19 @@
1
- import { CanvasTexture, EventDispatcher, Texture, TextureLoader } from "three";
1
+ import { EventDispatcher, Texture, TextureLoader } from "three";
2
2
  import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader";
3
3
  import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
4
4
  import { MTLLoader } from "three/examples/jsm/loaders/MTLLoader";
5
5
  import { OBJLoader } from "three/examples/jsm/loaders/OBJLoader";
6
+ import { STLLoader } from "three/examples/jsm/loaders/STLLoader";
6
7
  declare class ThreeLoader extends EventDispatcher {
7
8
  constructor();
8
9
  anisotropy: number;
9
10
  setAnisotropy(v: number): void;
10
11
  textureMap: Map<string, Texture>;
11
12
  textureLoader: TextureLoader;
12
- getTexture(src: string | HTMLCanvasElement): CanvasTexture | Texture;
13
+ getTexture(src: string | HTMLCanvasElement): Texture;
13
14
  fbxLoader: FBXLoader;
14
15
  objLoader: OBJLoader;
16
+ stlLoader: STLLoader;
15
17
  mtlLoader: MTLLoader;
16
18
  gltfLoader: GLTFLoader;
17
19
  onload: boolean;
package/threeLoader.js CHANGED
@@ -10,6 +10,7 @@ import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
10
10
  import { MTLLoader } from "three/examples/jsm/loaders/MTLLoader";
11
11
  import { OBJLoader } from "three/examples/jsm/loaders/OBJLoader";
12
12
  import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader";
13
+ import { STLLoader } from "three/examples/jsm/loaders/STLLoader";
13
14
  // 引入静态资源
14
15
  //@ts-ignore
15
16
  import dracoWasmWrapperJS from "./lib/draco/draco_wasm_wrapper.js?url";
@@ -85,6 +86,8 @@ class ThreeLoader extends EventDispatcher {
85
86
  fbxLoader = new FBXLoader();
86
87
  //obj 加载器
87
88
  objLoader = new OBJLoader();
89
+ // stl 加载器
90
+ stlLoader = new STLLoader();
88
91
  // 材质加载器
89
92
  mtlLoader = new MTLLoader();
90
93
  // gltf 加载器
package/threeLoader.ts CHANGED
@@ -11,6 +11,7 @@ import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
11
11
  import { MTLLoader } from "three/examples/jsm/loaders/MTLLoader";
12
12
  import { OBJLoader } from "three/examples/jsm/loaders/OBJLoader";
13
13
  import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader";
14
+ import { STLLoader } from "three/examples/jsm/loaders/STLLoader";
14
15
 
15
16
  // 引入静态资源
16
17
  //@ts-ignore
@@ -32,7 +33,7 @@ class ThreeLoader extends EventDispatcher {
32
33
 
33
34
  // 有资源加载完成时通知渲染器
34
35
  DefaultLoadingManager.onProgress = () => {
35
- this.dispatchEvent({ type: "progress" });
36
+ this.dispatchEvent({ type: "progress" } as never);
36
37
  }
37
38
 
38
39
  DefaultLoadingManager.onLoad = () => {
@@ -107,6 +108,9 @@ class ThreeLoader extends EventDispatcher {
107
108
  //obj 加载器
108
109
  objLoader = new OBJLoader();
109
110
 
111
+ // stl 加载器
112
+ stlLoader = new STLLoader();
113
+
110
114
  // 材质加载器
111
115
  mtlLoader = new MTLLoader();
112
116
 
package/threeUtils.ts CHANGED
@@ -37,7 +37,7 @@ class ThreeUtils extends EventDispatcher {
37
37
  type: "requestAnimationFrame",
38
38
  timeTemp,
39
39
  accumulate: this._accumulate
40
- });
40
+ } as never);
41
41
 
42
42
  this._computerDomZoom();
43
43