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/ApngTexture.ts +1 -1
- package/ApngTextureManage.ts +1 -1
- package/ExtrudeMesh.ts +1 -1
- package/KeyFrameAnimation.ts +1 -1
- package/Mirror.d.ts +25 -0
- package/Mirror.js +197 -0
- package/Mirror.ts +255 -0
- package/PlaneModal1/PlaneModal1.d.ts +1 -1
- package/PlaneModal1/PlaneModal1.ts +1 -1
- package/PlaneText.d.ts +12 -5
- package/PlaneWithHtml.ts +1 -1
- package/SpriteModal1/SpriteModal1.d.ts +2 -2
- package/SpriteModal1/SpriteModal1.ts +1 -1
- package/SpriteWithHtml.ts +1 -1
- package/Text3D/Text3D.ts +1 -1
- package/ThreeBase.d.ts +0 -1
- package/ThreeBase.js +47 -41
- package/ThreeBase.ts +55 -45
- package/ThreeMouse.ts +14 -14
- package/keyContorls.d.ts +2 -2
- package/keyContorls.ts +5 -5
- package/package.json +6 -2
- package/pass/FullScreenQuad.d.ts +1 -1
- package/pass/glow_pass.js +1 -0
- package/pass/glow_pass.ts +1 -0
- package/pass/stroke_pass.js +1 -0
- package/pass/stroke_pass.ts +1 -0
- package/threeLoader.d.ts +4 -2
- package/threeLoader.js +3 -0
- package/threeLoader.ts +5 -1
- package/threeUtils.ts +1 -1
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,
|
|
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 =
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
153
|
-
this.camera.position.set(x, y, z)
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
-
|
|
166
|
-
|
|
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
|
-
|
|
173
|
-
|
|
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,
|
|
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 =
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
-
|
|
181
|
-
this.camera.position.set(x, y, z)
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
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
|
-
|
|
196
|
-
|
|
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
|
-
|
|
204
|
-
|
|
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,
|
|
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 {
|
|
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<
|
|
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<
|
|
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.
|
|
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.
|
|
41
|
+
"@types/three": "^0.159.0",
|
|
42
|
+
"three": "^0.159.0",
|
|
39
43
|
"dexie": "^3",
|
|
40
44
|
"vite": "*",
|
|
41
45
|
"html2canvas": "^1.4.1"
|
package/pass/FullScreenQuad.d.ts
CHANGED
|
@@ -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);
|
package/pass/stroke_pass.js
CHANGED
|
@@ -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);
|
package/pass/stroke_pass.ts
CHANGED
|
@@ -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 {
|
|
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):
|
|
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
|
|