three-base 2.0.34 → 2.0.35

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/MeshBase.js CHANGED
@@ -1,4 +1,4 @@
1
- import { AnimationMixer, Clock, Group, Mesh, Object3D, Vector3 } from "three";
1
+ import { AnimationMixer, Clock, Group, Object3D, Vector3 } from "three";
2
2
  import threeUtils from "./threeUtils";
3
3
  import threeLoader from "./threeLoader";
4
4
  import * as SkeletonUtils from 'three/examples/jsm/utils/SkeletonUtils';
@@ -45,13 +45,6 @@ export default class MeshBase extends Group {
45
45
  console.error(`${url},加载失败`);
46
46
  });
47
47
  }
48
- else if (/\.stl$/i.test(url)) {
49
- await threeLoader.stlLoader.loadAsync(url).then(stlGeo => {
50
- modal = new Mesh(stlGeo);
51
- }).catch(() => {
52
- console.error(`${url},加载失败`);
53
- });
54
- }
55
48
  else {
56
49
  console.error(`${url},不支持的格式`);
57
50
  }
package/MeshBase.ts CHANGED
@@ -56,12 +56,6 @@ export default class MeshBase extends Group {
56
56
  }).catch(() => {
57
57
  console.error(`${url},加载失败`);
58
58
  })
59
- } else if (/\.stl$/i.test(url)) {
60
- await threeLoader.stlLoader.loadAsync(url).then(stlGeo => {
61
- modal = new Mesh(stlGeo);
62
- }).catch(() => {
63
- console.error(`${url},加载失败`);
64
- })
65
59
  } else {
66
60
  console.error(`${url},不支持的格式`);
67
61
  }
package/Text3D/Text3D.ts CHANGED
@@ -36,6 +36,7 @@ export default class Text3D extends Mesh {
36
36
  // 字体的存储路径 例如 : "http://drm.gitee.io/three-base-font/simhei/字.js"
37
37
  static path = "//www.3dkeshihua.com/three-base-font/";
38
38
 
39
+
39
40
  material = new MeshStandardMaterial({
40
41
  metalness: 1, // 金属度,值为0到1
41
42
  roughness: 0.5, // 粗糙度,值为0到1
package/ThreeBase.d.ts CHANGED
@@ -11,6 +11,7 @@ export default class ThreeBase extends EventDispatcher {
11
11
  tempVector2: Vector2;
12
12
  tempVector3: Vector3;
13
13
  size: Vector2;
14
+ rendererLost: boolean;
14
15
  renderer: WebGLRenderer;
15
16
  perspectiveCamera: PerspectiveCamera;
16
17
  orthographicCamera: OrthographicCamera;
package/ThreeBase.js CHANGED
@@ -52,6 +52,8 @@ export default class ThreeBase extends EventDispatcher {
52
52
  tempVector3 = new Vector3();
53
53
  //渲染器的尺寸
54
54
  size = new Vector2(0, 0);
55
+ //上下文丢失
56
+ rendererLost = false;
55
57
  // 渲染器对象
56
58
  renderer = (() => {
57
59
  const renderer = new WebGLRenderer({
@@ -63,6 +65,14 @@ export default class ThreeBase extends EventDispatcher {
63
65
  stencil: false, // 模版
64
66
  });
65
67
  renderer.domElement.id = generateUUID();
68
+ //监听上下文的销毁事件
69
+ renderer.domElement.addEventListener('webglcontextlost', (event) => {
70
+ this.rendererLost = true;
71
+ }, false);
72
+ // 监听上下文的恢复事件
73
+ renderer.domElement.addEventListener('webglcontextrestored', (event) => {
74
+ this.rendererLost = false;
75
+ }, false);
66
76
  renderer.localClippingEnabled = true;
67
77
  renderer.outputColorSpace = LinearSRGBColorSpace;
68
78
  renderer.setPixelRatio(window.devicePixelRatio);
@@ -121,8 +131,10 @@ export default class ThreeBase extends EventDispatcher {
121
131
  div.style.overflow = "hidden";
122
132
  div.innerHTML = "";
123
133
  div.append(this.renderer.domElement);
124
- this.renderer.forceContextRestore();
125
- this.renderer.domElement.style.opacity = "1";
134
+ if (this.rendererLost) {
135
+ this.renderer.forceContextRestore();
136
+ this.renderer.domElement.style.opacity = "1";
137
+ }
126
138
  this.setSize(div.clientWidth, div.clientHeight);
127
139
  // 开启时时渲染
128
140
  threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
@@ -322,9 +334,11 @@ export default class ThreeBase extends EventDispatcher {
322
334
  // 停止渲染
323
335
  stopRender() {
324
336
  threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
325
- this.renderer.forceContextLoss();
326
- this.setSize(100, 100);
327
- this.renderer.domElement.style.opacity = "0";
337
+ if (!this.rendererLost) {
338
+ this.renderer.forceContextLoss();
339
+ this.setSize(100, 100);
340
+ this.renderer.domElement.style.opacity = "0";
341
+ }
328
342
  }
329
343
  // 判断是否有 发光和描边的对象 以便判断是否需要 渲染深度纹理
330
344
  hasStrokeOrPass() {
package/ThreeBase.ts CHANGED
@@ -63,6 +63,9 @@ export default class ThreeBase extends EventDispatcher {
63
63
  //渲染器的尺寸
64
64
  size = new Vector2(0, 0);
65
65
 
66
+ //上下文丢失
67
+ rendererLost = false;
68
+
66
69
  // 渲染器对象
67
70
  renderer = (() => {
68
71
  const renderer = new WebGLRenderer({
@@ -75,6 +78,14 @@ export default class ThreeBase extends EventDispatcher {
75
78
  });
76
79
 
77
80
  renderer.domElement.id = generateUUID();
81
+ //监听上下文的销毁事件
82
+ renderer.domElement.addEventListener('webglcontextlost', (event) => {
83
+ this.rendererLost = true;
84
+ }, false);
85
+ // 监听上下文的恢复事件
86
+ renderer.domElement.addEventListener('webglcontextrestored', (event) => {
87
+ this.rendererLost = false;
88
+ }, false);
78
89
  renderer.localClippingEnabled = true;
79
90
  renderer.outputColorSpace = LinearSRGBColorSpace;
80
91
  renderer.setPixelRatio(window.devicePixelRatio);
@@ -139,8 +150,10 @@ export default class ThreeBase extends EventDispatcher {
139
150
  div.innerHTML = "";
140
151
  div.append(this.renderer.domElement);
141
152
 
142
- this.renderer.forceContextRestore();
143
- this.renderer.domElement.style.opacity = "1";
153
+ if (this.rendererLost) {
154
+ this.renderer.forceContextRestore();
155
+ this.renderer.domElement.style.opacity = "1";
156
+ }
144
157
 
145
158
  this.setSize(div.clientWidth, div.clientHeight);
146
159
 
@@ -390,9 +403,11 @@ export default class ThreeBase extends EventDispatcher {
390
403
  // 停止渲染
391
404
  stopRender() {
392
405
  threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
393
- this.renderer.forceContextLoss();
394
- this.setSize(100, 100);
395
- this.renderer.domElement.style.opacity = "0";
406
+ if (!this.rendererLost) {
407
+ this.renderer.forceContextLoss();
408
+ this.setSize(100, 100);
409
+ this.renderer.domElement.style.opacity = "0";
410
+ }
396
411
  }
397
412
 
398
413
  // 判断是否有 发光和描边的对象 以便判断是否需要 渲染深度纹理
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "three-base",
3
- "version": "2.0.34",
3
+ "version": "2.0.35",
4
4
  "description": "three 3d three-base",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes