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 +1 -8
- package/MeshBase.ts +0 -6
- package/Text3D/Text3D.ts +1 -0
- package/ThreeBase.d.ts +1 -0
- package/ThreeBase.js +19 -5
- package/ThreeBase.ts +20 -5
- package/package.json +1 -1
- /package/{PlaneModal1 → planeModal1}/PlaneModal1.d.ts +0 -0
- /package/{PlaneModal1 → planeModal1}/PlaneModal1.js +0 -0
- /package/{PlaneModal1 → planeModal1}/PlaneModal1.ts +0 -0
- /package/{PlaneModal1 → planeModal1}/index.d.ts +0 -0
- /package/{PlaneModal1 → planeModal1}/index.js +0 -0
- /package/{PlaneModal1 → planeModal1}/index.ts +0 -0
- /package/{PlaneModal1 → planeModal1}/planeModal.png +0 -0
- /package/{SpriteModal1 → spriteModal1}/SpriteModal1.d.ts +0 -0
- /package/{SpriteModal1 → spriteModal1}/SpriteModal1.js +0 -0
- /package/{SpriteModal1 → spriteModal1}/SpriteModal1.ts +0 -0
- /package/{SpriteModal1 → spriteModal1}/index.d.ts +0 -0
- /package/{SpriteModal1 → spriteModal1}/index.js +0 -0
- /package/{SpriteModal1 → spriteModal1}/index.ts +0 -0
- /package/{SpriteModal1 → spriteModal1}/spriteModal1.png +0 -0
package/MeshBase.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AnimationMixer, Clock, Group,
|
|
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.
|
|
125
|
-
|
|
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.
|
|
326
|
-
|
|
327
|
-
|
|
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.
|
|
143
|
-
|
|
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.
|
|
394
|
-
|
|
395
|
-
|
|
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
|
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
|
|
File without changes
|