three-base 2.0.15 → 2.0.17

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/ThreeBase.js CHANGED
@@ -106,6 +106,7 @@ export default class ThreeBase extends EventDispatcher {
106
106
  div.append(this.renderer.domElement);
107
107
  // 如果上下文被销毁了, 就恢复上下文
108
108
  if (this.isRendererContextLost) {
109
+ this.isRendererContextLost = false;
109
110
  this.renderer.forceContextRestore();
110
111
  await new Promise(resolve => requestAnimationFrame(resolve));
111
112
  await new Promise(resolve => requestAnimationFrame(resolve));
@@ -119,7 +120,7 @@ export default class ThreeBase extends EventDispatcher {
119
120
  }
120
121
  // 修改尺寸
121
122
  setSize(width, height) {
122
- if (this.camera instanceof PerspectiveCamera) {
123
+ if (this.camera.type == 'PerspectiveCamera') {
123
124
  this.camera.aspect = width / height;
124
125
  this.camera.updateProjectionMatrix();
125
126
  }
@@ -295,8 +296,7 @@ export default class ThreeBase extends EventDispatcher {
295
296
  this.renderer.render(this.scene, this.camera);
296
297
  this.renderer.setRenderTarget(null);
297
298
  this.renderer.clear();
298
- this.renderRendererTarget(this.baseRenderTarget);
299
- // this.renderer.render(this.scene, this.camera);
299
+ this.renderer.render(this.scene, this.camera);
300
300
  // 查找需要绘制描边的对象,并且绘制描边
301
301
  this.scene.traverse(obj => {
302
302
  stroke_pass(this.renderer, this.camera, obj, this.baseDepthTexture);
package/ThreeBase.ts CHANGED
@@ -125,6 +125,7 @@ export default class ThreeBase extends EventDispatcher {
125
125
 
126
126
  // 如果上下文被销毁了, 就恢复上下文
127
127
  if (this.isRendererContextLost) {
128
+ this.isRendererContextLost = false;
128
129
  this.renderer.forceContextRestore();
129
130
  await new Promise(resolve => requestAnimationFrame(resolve));
130
131
  await new Promise(resolve => requestAnimationFrame(resolve));
@@ -141,9 +142,9 @@ export default class ThreeBase extends EventDispatcher {
141
142
 
142
143
  // 修改尺寸
143
144
  setSize(width: number, height: number) {
144
- if (this.camera instanceof PerspectiveCamera) {
145
- this.camera.aspect = width / height;
146
- this.camera.updateProjectionMatrix();
145
+ if ((this.camera as PerspectiveCamera).type == 'PerspectiveCamera') {
146
+ (this.camera as PerspectiveCamera).aspect = width / height;
147
+ (this.camera as PerspectiveCamera).updateProjectionMatrix();
147
148
  }
148
149
 
149
150
  this.renderer.setPixelRatio(window.devicePixelRatio);
@@ -354,8 +355,7 @@ export default class ThreeBase extends EventDispatcher {
354
355
 
355
356
  this.renderer.setRenderTarget(null);
356
357
  this.renderer.clear();
357
- this.renderRendererTarget(this.baseRenderTarget);
358
- // this.renderer.render(this.scene, this.camera);
358
+ this.renderer.render(this.scene, this.camera);
359
359
 
360
360
  // 查找需要绘制描边的对象,并且绘制描边
361
361
  this.scene.traverse(obj => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "three-base",
3
- "version": "2.0.15",
3
+ "version": "2.0.17",
4
4
  "description": "three 3d three-base",
5
5
  "repository": {
6
6
  "type": "git",
@@ -371,7 +371,6 @@ const blurShader = new RawShaderMaterial({
371
371
  vec4 stroke(){
372
372
  vec4 blurColor = vec4(0.0);
373
373
  vec4 Color = vec4(0.0);
374
- int vSum = 0; // 周围像素点中和 visibleColor 相似的数量
375
374
  for (int i = 0; i < 24; i++ ) {
376
375
  Color = texture2D(tDiffuse, vUv + (offset[i] * piexl));
377
376
  if (Color.a > 0.0) {
@@ -485,7 +484,7 @@ export default function stroke_pass(renderer, camera, object3d, baseDepthTexture
485
484
  FXAAShaderMaterial.uniforms.resolution.value.set(1 / size.x, 1 / size.y);
486
485
  //描边颜色
487
486
  blurShader.uniforms.color.value.set(stroke_color);
488
- blurShader.uniforms.width.value = stroke_width / 4;
487
+ blurShader.uniforms.width.value = 1;
489
488
  //深度测试
490
489
  renderer.setRenderTarget(selectDethpTestTextureTarget);
491
490
  renderer.clear();
@@ -501,14 +500,16 @@ export default function stroke_pass(renderer, camera, object3d, baseDepthTexture
501
500
  renderer.setRenderTarget(blur2TextureTarget);
502
501
  blurShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
503
502
  fsQuad.render(renderer, blurShader);
504
- //三次描边
505
- renderer.setRenderTarget(blur1TextureTarget);
506
- blurShader.uniforms.tDiffuse.value = blur2TextureTarget.texture;
507
- fsQuad.render(renderer, blurShader);
508
- //四次描边
509
- renderer.setRenderTarget(blur2TextureTarget);
510
- blurShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
511
- fsQuad.render(renderer, blurShader);
503
+ for (let i = 0; i < stroke_width - 2; i++) {
504
+ //一次描边
505
+ renderer.setRenderTarget(blur1TextureTarget);
506
+ blurShader.uniforms.tDiffuse.value = blur2TextureTarget.texture;
507
+ fsQuad.render(renderer, blurShader);
508
+ //二次描边
509
+ renderer.setRenderTarget(blur2TextureTarget);
510
+ blurShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
511
+ fsQuad.render(renderer, blurShader);
512
+ }
512
513
  //最后抗锯齿
513
514
  renderer.setRenderTarget(blur1TextureTarget);
514
515
  FXAAShaderMaterial.uniforms.tDiffuse.value = blur2TextureTarget.texture;
@@ -383,7 +383,6 @@ const blurShader = new RawShaderMaterial({
383
383
  vec4 stroke(){
384
384
  vec4 blurColor = vec4(0.0);
385
385
  vec4 Color = vec4(0.0);
386
- int vSum = 0; // 周围像素点中和 visibleColor 相似的数量
387
386
  for (int i = 0; i < 24; i++ ) {
388
387
  Color = texture2D(tDiffuse, vUv + (offset[i] * piexl));
389
388
  if (Color.a > 0.0) {
@@ -505,7 +504,7 @@ export default function stroke_pass(renderer: WebGLRenderer, camera: Camera, obj
505
504
  FXAAShaderMaterial.uniforms.resolution.value.set(1 / size.x, 1 / size.y);
506
505
  //描边颜色
507
506
  blurShader.uniforms.color.value.set(stroke_color);
508
- blurShader.uniforms.width.value = stroke_width / 4;
507
+ blurShader.uniforms.width.value = 1;
509
508
 
510
509
 
511
510
  //深度测试
@@ -516,7 +515,6 @@ export default function stroke_pass(renderer: WebGLRenderer, camera: Camera, obj
516
515
  depthTestShader.uniforms.selectDepth.value = selectDepthTexture;
517
516
  fsQuad.render(renderer, depthTestShader);
518
517
 
519
-
520
518
  //一次描边
521
519
  renderer.setRenderTarget(blur1TextureTarget);
522
520
  blurShader.uniforms.tDiffuse.value = selectDethpTestTextureTarget.texture;
@@ -527,15 +525,18 @@ export default function stroke_pass(renderer: WebGLRenderer, camera: Camera, obj
527
525
  blurShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
528
526
  fsQuad.render(renderer, blurShader);
529
527
 
530
- //三次描边
531
- renderer.setRenderTarget(blur1TextureTarget);
532
- blurShader.uniforms.tDiffuse.value = blur2TextureTarget.texture;
533
- fsQuad.render(renderer, blurShader);
534
528
 
535
- //四次描边
536
- renderer.setRenderTarget(blur2TextureTarget);
537
- blurShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
538
- fsQuad.render(renderer, blurShader);
529
+ for (let i = 0; i < stroke_width - 2; i++) {
530
+ //一次描边
531
+ renderer.setRenderTarget(blur1TextureTarget);
532
+ blurShader.uniforms.tDiffuse.value = blur2TextureTarget.texture;
533
+ fsQuad.render(renderer, blurShader);
534
+
535
+ //二次描边
536
+ renderer.setRenderTarget(blur2TextureTarget);
537
+ blurShader.uniforms.tDiffuse.value = blur1TextureTarget.texture;
538
+ fsQuad.render(renderer, blurShader);
539
+ }
539
540
 
540
541
  //最后抗锯齿
541
542
  renderer.setRenderTarget(blur1TextureTarget);
package/threeLoader.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * @Last Modified by: xiaosihan
5
5
  * @Last Modified time: 2023-02-07 11:11:48
6
6
  */
7
- import { CanvasTexture, DefaultLoadingManager, EventDispatcher, RepeatWrapping, SRGBColorSpace, TextureLoader, VideoTexture } from "three";
7
+ import { CanvasTexture, DefaultLoadingManager, EventDispatcher, RepeatWrapping, TextureLoader, VideoTexture } from "three";
8
8
  import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader";
9
9
  import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
10
10
  import { MTLLoader } from "three/examples/jsm/loaders/MTLLoader";
@@ -33,7 +33,7 @@ class ThreeLoader extends EventDispatcher {
33
33
  };
34
34
  }
35
35
  // 各向异性
36
- anisotropy = 1;
36
+ anisotropy = 16;
37
37
  // 设置各向异性 由渲染器来调用并设置
38
38
  setAnisotropy(v) {
39
39
  this.anisotropy = v;
@@ -49,7 +49,7 @@ class ThreeLoader extends EventDispatcher {
49
49
  const canvasTexture = new CanvasTexture(src);
50
50
  canvasTexture.wrapS = canvasTexture.wrapT = RepeatWrapping;
51
51
  canvasTexture.anisotropy = this.anisotropy;
52
- canvasTexture.colorSpace = SRGBColorSpace;
52
+ // canvasTexture.colorSpace = SRGBColorSpace;
53
53
  return canvasTexture;
54
54
  }
55
55
  let texture = this.textureMap.get(src);
@@ -77,7 +77,7 @@ class ThreeLoader extends EventDispatcher {
77
77
  }
78
78
  texture.wrapS = texture.wrapT = RepeatWrapping;
79
79
  texture.anisotropy = this.anisotropy;
80
- texture.colorSpace = SRGBColorSpace;
80
+ // texture.colorSpace = SRGBColorSpace;
81
81
  return texture;
82
82
  }
83
83
  ;
package/threeLoader.ts CHANGED
@@ -41,7 +41,7 @@ class ThreeLoader extends EventDispatcher {
41
41
  }
42
42
 
43
43
  // 各向异性
44
- anisotropy = 1;
44
+ anisotropy = 16;
45
45
 
46
46
  // 设置各向异性 由渲染器来调用并设置
47
47
  setAnisotropy(v: number) {
@@ -62,7 +62,7 @@ class ThreeLoader extends EventDispatcher {
62
62
  const canvasTexture = new CanvasTexture(src);
63
63
  canvasTexture.wrapS = canvasTexture.wrapT = RepeatWrapping;
64
64
  canvasTexture.anisotropy = this.anisotropy;
65
- canvasTexture.colorSpace = SRGBColorSpace;
65
+ // canvasTexture.colorSpace = SRGBColorSpace;
66
66
 
67
67
  return canvasTexture;
68
68
  }
@@ -96,7 +96,7 @@ class ThreeLoader extends EventDispatcher {
96
96
 
97
97
  texture.wrapS = texture.wrapT = RepeatWrapping;
98
98
  texture.anisotropy = this.anisotropy;
99
- texture.colorSpace = SRGBColorSpace;
99
+ // texture.colorSpace = SRGBColorSpace;
100
100
 
101
101
  return texture as Texture;
102
102
  };
package/threeUtils.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * @Last Modified by: xiaosihan
5
5
  * @Last Modified time: 2023-05-03 00:36:18
6
6
  */
7
- import { Box3, BufferGeometry, Clock, EventDispatcher, Object3D, Vector3 } from "three";
7
+ import { Box3, Clock, EventDispatcher, Vector3 } from "three";
8
8
  import { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter';
9
9
  class ThreeUtils extends EventDispatcher {
10
10
  constructor() {
@@ -108,11 +108,11 @@ class ThreeUtils extends EventDispatcher {
108
108
  }
109
109
  // 获取中心点
110
110
  getCenter(object3d) {
111
- if (object3d instanceof Object3D) {
111
+ if (object3d.isObject3D) {
112
112
  this._box3.setFromObject(object3d);
113
113
  this._box3.getCenter(this._center);
114
114
  }
115
- else if (object3d instanceof BufferGeometry) {
115
+ else if (object3d.isBufferGeometry) {
116
116
  object3d.computeBoundingBox();
117
117
  object3d.boundingBox.getCenter(this._center);
118
118
  }
@@ -120,11 +120,11 @@ class ThreeUtils extends EventDispatcher {
120
120
  }
121
121
  // 获取模型大小
122
122
  getSize(object3d) {
123
- if (object3d instanceof Object3D) {
123
+ if (object3d.isObject3D) {
124
124
  this._box3.setFromObject(object3d);
125
125
  this._box3.getSize(this._size);
126
126
  }
127
- else if (object3d instanceof BufferGeometry) {
127
+ else if (object3d.isBufferGeometry) {
128
128
  object3d.computeBoundingBox();
129
129
  object3d.boundingBox.getSize(this._size);
130
130
  }
@@ -132,7 +132,7 @@ class ThreeUtils extends EventDispatcher {
132
132
  }
133
133
  // 模型对齐底面
134
134
  alignBottom(object3d, y = 0) {
135
- if (object3d instanceof Object3D) {
135
+ if (object3d.isObject3D) {
136
136
  this._box3.setFromObject(object3d);
137
137
  this._box3.getCenter(this._center);
138
138
  this._box3.getSize(this._size);
@@ -140,20 +140,20 @@ class ThreeUtils extends EventDispatcher {
140
140
  object3d.position.y += y;
141
141
  object3d.updateMatrixWorld(true);
142
142
  }
143
- else if (object3d instanceof BufferGeometry) {
143
+ else if (object3d.isBufferGeometry) {
144
144
  object3d.computeBoundingBox();
145
145
  object3d.translate(0, -object3d.boundingBox.min.y + y, 0);
146
146
  }
147
147
  }
148
148
  // 居中对象
149
149
  centerObject3D(object3d) {
150
- if (object3d instanceof Object3D) {
150
+ if (object3d.isObject3D) {
151
151
  this._box3.setFromObject(object3d);
152
152
  this._box3.getCenter(this._center);
153
153
  object3d.position.sub(this._center);
154
154
  object3d.updateMatrixWorld(true);
155
155
  }
156
- else if (object3d instanceof BufferGeometry) {
156
+ else if (object3d.isBufferGeometry) {
157
157
  object3d.center();
158
158
  }
159
159
  }
@@ -161,15 +161,15 @@ class ThreeUtils extends EventDispatcher {
161
161
  center(object3d) {
162
162
  this.centerObject3D(object3d);
163
163
  }
164
- // 使用指定的纬度计算, 缩放至指定大小
164
+ // 使用指定的维度(xyz)计算, 缩放至指定大小;
165
165
  scaleTo(object3d, size = 1, key = ["x", "y", "z"]) {
166
166
  const originSize = this.getSize(object3d);
167
167
  const scale = size / Math.max(...key.map(k => originSize[k]));
168
- if (object3d instanceof Object3D) {
168
+ if (object3d.isObject3D) {
169
169
  object3d.scale.multiplyScalar(scale);
170
170
  object3d.updateMatrixWorld(true);
171
171
  }
172
- else if (object3d instanceof BufferGeometry) {
172
+ else if (object3d.isBufferGeometry) {
173
173
  object3d.scale(scale, scale, scale);
174
174
  }
175
175
  }
package/threeUtils.ts CHANGED
@@ -131,12 +131,12 @@ class ThreeUtils extends EventDispatcher {
131
131
 
132
132
  // 获取中心点
133
133
  getCenter(object3d: Object3D | BufferGeometry) {
134
- if (object3d instanceof Object3D) {
135
- this._box3.setFromObject(object3d);
134
+ if ((object3d as Object3D).isObject3D) {
135
+ this._box3.setFromObject(object3d as Object3D);
136
136
  this._box3.getCenter(this._center);
137
- } else if (object3d instanceof BufferGeometry) {
138
- object3d.computeBoundingBox();
139
- object3d.boundingBox!.getCenter(this._center);
137
+ } else if ((object3d as BufferGeometry).isBufferGeometry) {
138
+ (object3d as BufferGeometry).computeBoundingBox();
139
+ (object3d as BufferGeometry).boundingBox!.getCenter(this._center);
140
140
  }
141
141
 
142
142
  return this._center;
@@ -144,12 +144,12 @@ class ThreeUtils extends EventDispatcher {
144
144
 
145
145
  // 获取模型大小
146
146
  getSize(object3d: Object3D | BufferGeometry) {
147
- if (object3d instanceof Object3D) {
148
- this._box3.setFromObject(object3d);
147
+ if ((object3d as Object3D).isObject3D) {
148
+ this._box3.setFromObject(object3d as Object3D);
149
149
  this._box3.getSize(this._size);
150
- } else if (object3d instanceof BufferGeometry) {
151
- object3d.computeBoundingBox();
152
- object3d.boundingBox!.getSize(this._size);
150
+ } else if ((object3d as BufferGeometry).isBufferGeometry) {
151
+ (object3d as BufferGeometry).computeBoundingBox();
152
+ (object3d as BufferGeometry).boundingBox!.getSize(this._size);
153
153
  }
154
154
 
155
155
  return this._size;
@@ -157,28 +157,28 @@ class ThreeUtils extends EventDispatcher {
157
157
 
158
158
  // 模型对齐底面
159
159
  alignBottom(object3d: Object3D | BufferGeometry, y = 0) {
160
- if (object3d instanceof Object3D) {
161
- this._box3.setFromObject(object3d);
160
+ if ((object3d as Object3D).isObject3D) {
161
+ this._box3.setFromObject(object3d as Object3D);
162
162
  this._box3.getCenter(this._center);
163
163
  this._box3.getSize(this._size);
164
- object3d.position.y -= (this._center.y - (this._size.y * 0.5));
165
- object3d.position.y += y;
166
- object3d.updateMatrixWorld(true);
167
- } else if (object3d instanceof BufferGeometry) {
168
- object3d.computeBoundingBox();
169
- object3d.translate(0, -object3d.boundingBox!.min.y + y, 0);
164
+ (object3d as Object3D).position.y -= (this._center.y - (this._size.y * 0.5));
165
+ (object3d as Object3D).position.y += y;
166
+ (object3d as Object3D).updateMatrixWorld(true);
167
+ } else if ((object3d as BufferGeometry).isBufferGeometry) {
168
+ (object3d as BufferGeometry).computeBoundingBox();
169
+ (object3d as BufferGeometry).translate(0, -(object3d as BufferGeometry).boundingBox!.min.y + y, 0);
170
170
  }
171
171
  }
172
172
 
173
173
  // 居中对象
174
174
  centerObject3D(object3d: Object3D | BufferGeometry) {
175
- if (object3d instanceof Object3D) {
176
- this._box3.setFromObject(object3d);
175
+ if ((object3d as Object3D).isObject3D) {
176
+ this._box3.setFromObject(object3d as Object3D);
177
177
  this._box3.getCenter(this._center);
178
- object3d.position.sub(this._center);
179
- object3d.updateMatrixWorld(true);
180
- } else if (object3d instanceof BufferGeometry) {
181
- object3d.center();
178
+ (object3d as Object3D).position.sub(this._center);
179
+ (object3d as Object3D).updateMatrixWorld(true);
180
+ } else if ((object3d as BufferGeometry).isBufferGeometry) {
181
+ (object3d as BufferGeometry).center();
182
182
  }
183
183
  }
184
184
 
@@ -187,16 +187,16 @@ class ThreeUtils extends EventDispatcher {
187
187
  this.centerObject3D(object3d);
188
188
  }
189
189
 
190
- // 使用指定的纬度计算, 缩放至指定大小
190
+ // 使用指定的维度(xyz)计算, 缩放至指定大小;
191
191
  scaleTo(object3d: Object3D | BufferGeometry, size: number = 1, key: Array<"x" | "y" | "z"> = ["x", "y", "z"]) {
192
192
  const originSize = this.getSize(object3d);
193
193
  const scale = size / Math.max(...key.map(k => originSize[k]));
194
194
 
195
- if (object3d instanceof Object3D) {
196
- object3d.scale.multiplyScalar(scale);
197
- object3d.updateMatrixWorld(true);
198
- } else if (object3d instanceof BufferGeometry) {
199
- object3d.scale(scale, scale, scale);
195
+ if ((object3d as Object3D).isObject3D) {
196
+ (object3d as Object3D).scale.multiplyScalar(scale);
197
+ (object3d as Object3D).updateMatrixWorld(true);
198
+ } else if ((object3d as BufferGeometry).isBufferGeometry) {
199
+ (object3d as BufferGeometry).scale(scale, scale, scale);
200
200
  }
201
201
  }
202
202