three-base 2.0.34 → 2.0.36

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
@@ -5,7 +5,7 @@
5
5
  * @Last Modified time: 2024-01-20 05:33:28
6
6
  */
7
7
  import { round } from "lodash";
8
- import { AxesHelper, DepthFormat, DepthTexture, EventDispatcher, GridHelper, LinearFilter, LinearSRGBColorSpace, MOUSE, Mesh, NoBlending, NormalBlending, OrthographicCamera, PerspectiveCamera, RGBAFormat, Scene, TOUCH, UnsignedShortType, Vector2, Vector3, WebGLRenderTarget, WebGLRenderer } from "three";
8
+ import { AxesHelper, DepthFormat, DepthTexture, EventDispatcher, GridHelper, LinearFilter, MOUSE, Mesh, NoBlending, NormalBlending, OrthographicCamera, PerspectiveCamera, RGBAFormat, Scene, TOUCH, UnsignedShortType, Vector2, Vector3, WebGLRenderTarget, WebGLRenderer } from "three";
9
9
  import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
10
10
  import { degToRad, generateUUID } from "three/src/math/MathUtils";
11
11
  import ThreeMouse from "./ThreeMouse";
@@ -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,8 +65,15 @@ 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
- renderer.outputColorSpace = LinearSRGBColorSpace;
68
77
  renderer.setPixelRatio(window.devicePixelRatio);
69
78
  renderer.autoClear = false;
70
79
  renderer.clear();
@@ -121,8 +130,10 @@ export default class ThreeBase extends EventDispatcher {
121
130
  div.style.overflow = "hidden";
122
131
  div.innerHTML = "";
123
132
  div.append(this.renderer.domElement);
124
- this.renderer.forceContextRestore();
125
- this.renderer.domElement.style.opacity = "1";
133
+ if (this.rendererLost) {
134
+ this.renderer.forceContextRestore();
135
+ this.renderer.domElement.style.opacity = "1";
136
+ }
126
137
  this.setSize(div.clientWidth, div.clientHeight);
127
138
  // 开启时时渲染
128
139
  threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
@@ -322,9 +333,11 @@ export default class ThreeBase extends EventDispatcher {
322
333
  // 停止渲染
323
334
  stopRender() {
324
335
  threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
325
- this.renderer.forceContextLoss();
326
- this.setSize(100, 100);
327
- this.renderer.domElement.style.opacity = "0";
336
+ if (!this.rendererLost) {
337
+ this.renderer.forceContextLoss();
338
+ this.setSize(100, 100);
339
+ this.renderer.domElement.style.opacity = "0";
340
+ }
328
341
  }
329
342
  // 判断是否有 发光和描边的对象 以便判断是否需要 渲染深度纹理
330
343
  hasStrokeOrPass() {
package/ThreeBase.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import { add, round } from "lodash";
9
- import { AxesHelper, BufferGeometry, DepthFormat, DepthTexture, EventDispatcher, GridHelper, LinearFilter, LinearSRGBColorSpace, MOUSE, Mesh, MeshBasicMaterial, NoBlending, NormalBlending, Object3D, OrthographicCamera, PerspectiveCamera, RGBAFormat, Scene, TOUCH, Texture, UnsignedShortType, Vector2, Vector3, WebGLRenderTarget, WebGLRenderer } from "three";
9
+ import { AxesHelper, BufferGeometry, DepthFormat, DepthTexture, EventDispatcher, GridHelper, LinearFilter, LinearSRGBColorSpace, MOUSE, Mesh, MeshBasicMaterial, NoBlending, NormalBlending, Object3D, OrthographicCamera, PerspectiveCamera, RGBAFormat, SRGBColorSpace, Scene, TOUCH, Texture, UnsignedShortType, Vector2, Vector3, WebGLRenderTarget, WebGLRenderer } from "three";
10
10
  import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
11
11
  import { degToRad, generateUUID } from "three/src/math/MathUtils";
12
12
  import ThreeMouse from "./ThreeMouse";
@@ -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,8 +78,15 @@ 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
- renderer.outputColorSpace = LinearSRGBColorSpace;
80
90
  renderer.setPixelRatio(window.devicePixelRatio);
81
91
  renderer.autoClear = false;
82
92
  renderer.clear();
@@ -139,8 +149,10 @@ export default class ThreeBase extends EventDispatcher {
139
149
  div.innerHTML = "";
140
150
  div.append(this.renderer.domElement);
141
151
 
142
- this.renderer.forceContextRestore();
143
- this.renderer.domElement.style.opacity = "1";
152
+ if (this.rendererLost) {
153
+ this.renderer.forceContextRestore();
154
+ this.renderer.domElement.style.opacity = "1";
155
+ }
144
156
 
145
157
  this.setSize(div.clientWidth, div.clientHeight);
146
158
 
@@ -390,9 +402,11 @@ export default class ThreeBase extends EventDispatcher {
390
402
  // 停止渲染
391
403
  stopRender() {
392
404
  threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
393
- this.renderer.forceContextLoss();
394
- this.setSize(100, 100);
395
- this.renderer.domElement.style.opacity = "0";
405
+ if (!this.rendererLost) {
406
+ this.renderer.forceContextLoss();
407
+ this.setSize(100, 100);
408
+ this.renderer.domElement.style.opacity = "0";
409
+ }
396
410
  }
397
411
 
398
412
  // 判断是否有 发光和描边的对象 以便判断是否需要 渲染深度纹理
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "three-base",
3
- "version": "2.0.34",
3
+ "version": "2.0.36",
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