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 +1 -8
- package/MeshBase.ts +0 -6
- package/Text3D/Text3D.ts +1 -0
- package/ThreeBase.d.ts +1 -0
- package/ThreeBase.js +20 -7
- package/ThreeBase.ts +21 -7
- 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
|
@@ -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,
|
|
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.
|
|
125
|
-
|
|
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.
|
|
326
|
-
|
|
327
|
-
|
|
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.
|
|
143
|
-
|
|
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.
|
|
394
|
-
|
|
395
|
-
|
|
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
|
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
|