three-base 2.0.21 → 2.0.22

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
@@ -5,16 +5,16 @@
5
5
  * @Last Modified time: 2023-05-23 23:54:13
6
6
  */
7
7
  import { round } from "lodash";
8
- import { AxesHelper, DepthFormat, DepthTexture, EventDispatcher, GridHelper, LinearFilter, Mesh, MOUSE, NoBlending, NormalBlending, PerspectiveCamera, RGBAFormat, Scene, TOUCH, UnsignedShortType, Vector2, Vector3, WebGLRenderer, WebGLRenderTarget } from "three";
8
+ import { AxesHelper, DepthFormat, DepthTexture, EventDispatcher, GridHelper, LinearFilter, Mesh, MOUSE, NoBlending, NoColorSpace, 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
+ import glow_pass from "./pass/glow_pass";
12
+ import stroke_pass from "./pass/stroke_pass";
11
13
  import { clearShader, coptyShader, fullScreenMesh, gaussBlurShader, strokeShader } from "./shaders";
12
14
  import threeLoader from "./threeLoader";
13
15
  import ThreeMouse from "./ThreeMouse";
14
16
  import threeUtils from "./threeUtils";
15
17
  import Transition from "./Transition";
16
- import stroke_pass from "./pass/stroke_pass";
17
- import glow_pass from "./pass/glow_pass";
18
18
  // three.js 的基础对象
19
19
  export default class ThreeBase extends EventDispatcher {
20
20
  constructor() {
@@ -64,6 +64,7 @@ export default class ThreeBase extends EventDispatcher {
64
64
  });
65
65
  renderer.domElement.id = generateUUID();
66
66
  renderer.localClippingEnabled = true;
67
+ renderer.outputColorSpace = NoColorSpace;
67
68
  renderer.setPixelRatio(window.devicePixelRatio);
68
69
  renderer.autoClear = false;
69
70
  renderer.clear();
@@ -95,9 +96,6 @@ export default class ThreeBase extends EventDispatcher {
95
96
  div.style.overflow = "hidden";
96
97
  div.innerHTML = "";
97
98
  div.append(this.renderer.domElement);
98
- // this.renderer.forceContextLoss();
99
- // await new Promise(resolve => requestAnimationFrame(resolve));
100
- // await new Promise(resolve => requestAnimationFrame(resolve));
101
99
  this.renderer.forceContextRestore();
102
100
  this.renderer.domElement.style.opacity = "1";
103
101
  this.setSize(div.clientWidth, div.clientHeight);
@@ -114,7 +112,11 @@ export default class ThreeBase extends EventDispatcher {
114
112
  }
115
113
  this.renderer.setPixelRatio(window.devicePixelRatio);
116
114
  this.renderer.setSize(width, height);
115
+ // 设置帧缓存区的尺寸
117
116
  this.baseRenderTarget.setSize(width * window.devicePixelRatio, height * window.devicePixelRatio);
117
+ // 设置深度纹理的尺寸
118
+ this.baseDepthTexture.image.width = width * window.devicePixelRatio;
119
+ this.baseDepthTexture.image.height = height * window.devicePixelRatio;
118
120
  this.size.set(width, height);
119
121
  // 渲染场景
120
122
  // this.renderer.clear();
@@ -142,11 +144,11 @@ export default class ThreeBase extends EventDispatcher {
142
144
  const controlsPosition = new Transition({ x: 100, y: 100, z: 100 });
143
145
  controlsPosition.setDuration(1000);
144
146
  controlsPosition.onChange(({ x, y, z }) => {
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);
147
+ // const distance = this.controlsDistance.get("distance");
148
+ this.camera.position.set(x + 0.01, y, z + 0.01);
149
+ // .sub(this.controls.target)
150
+ // .setLength(distance)
151
+ // .add(this.controls.target);
150
152
  // // 创建初始方向向量
151
153
  // const directionVecA = new THREE.Vector3(1, 0, 0); // 需要旋转的初始方向向量
152
154
  // const referenceVecB = new THREE.Vector3(0, 1, 0); // 参考方向向量,用于确定旋转轴
@@ -303,14 +305,15 @@ export default class ThreeBase extends EventDispatcher {
303
305
  }
304
306
  // 渲染场景
305
307
  this.dispatchEvent({ type: "beforeRender" });
306
- // this.renderer.setRenderTarget(this.baseRenderTarget);
308
+ // 把基础场景渲染到 帧缓冲区 在后期通道中会用到
309
+ this.renderer.setRenderTarget(this.baseRenderTarget);
307
310
  this.renderer.clear();
308
311
  this.renderer.render(this.scene, this.camera);
309
- // this.renderer.setRenderTarget(null);
310
- // this.renderer.clear();
311
- //TODO 渲染了2次, 还有优化空间
312
+ // 清空主画布
313
+ this.renderer.setRenderTarget(null);
314
+ this.renderer.clear();
312
315
  // this.renderer.setScissorTest(false);
313
- // this.renderRendererTarget(this.baseRenderTarget);
316
+ this.renderRendererTarget(this.baseRenderTarget);
314
317
  // this.renderer.setScissorTest(true);
315
318
  // this.renderer.setScissor(0, 0, 800, 1000);
316
319
  // this.renderer.render(this.scene, this.camera);
@@ -442,7 +445,7 @@ export default class ThreeBase extends EventDispatcher {
442
445
  this.renderTargetgaussBlur(renderTarget, 1, 1);
443
446
  this.renderTargetgaussBlur(renderTarget, 1, 1);
444
447
  }
445
- // 渲染 渲染目标
448
+ // TODO 需要做康锯齿处理 渲染 渲染目标
446
449
  renderRendererTarget(renderTarget, alpha = false) {
447
450
  coptyShader.uniforms.map.value = renderTarget.texture;
448
451
  coptyShader.uniforms.opacity.value = 1.0;
package/ThreeBase.ts CHANGED
@@ -6,16 +6,16 @@
6
6
  */
7
7
 
8
8
  import { round } from "lodash";
9
- import { AxesHelper, BufferGeometry, Camera, DepthFormat, DepthTexture, DisplayP3ColorSpace, EventDispatcher, GridHelper, LinearEncoding, LinearFilter, LinearSRGBColorSpace, Mesh, MeshBasicMaterial, MOUSE, NoBlending, NoColorSpace, NormalBlending, Object3D, PerspectiveCamera, RGBAFormat, Scene, SRGBColorSpace, sRGBEncoding, Texture, TOUCH, UnsignedShortType, Vector2, Vector3, WebGLRenderer, WebGLRenderTarget } from "three";
9
+ import { AxesHelper, BufferGeometry, Camera, DepthFormat, DepthTexture, DisplayP3ColorSpace, EventDispatcher, GridHelper, LinearDisplayP3ColorSpace, LinearFilter, LinearSRGBColorSpace, Mesh, MeshBasicMaterial, MOUSE, NoBlending, NoColorSpace, NormalBlending, Object3D, PerspectiveCamera, RGBAFormat, Scene, SRGBColorSpace, Texture, TOUCH, UnsignedShortType, Vector2, Vector3, WebGLRenderer, WebGLRenderTarget } from "three";
10
10
  import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
11
11
  import { generateUUID } from "three/src/math/MathUtils";
12
+ import glow_pass from "./pass/glow_pass";
13
+ import stroke_pass from "./pass/stroke_pass";
12
14
  import { clearShader, coptyShader, fullScreenMesh, gaussBlurShader, strokeShader } from "./shaders";
13
15
  import threeLoader from "./threeLoader";
14
16
  import ThreeMouse from "./ThreeMouse";
15
17
  import threeUtils from "./threeUtils";
16
18
  import Transition from "./Transition";
17
- import stroke_pass from "./pass/stroke_pass";
18
- import glow_pass from "./pass/glow_pass";
19
19
 
20
20
  // three.js 的基础对象
21
21
  export default class ThreeBase extends EventDispatcher {
@@ -76,6 +76,7 @@ export default class ThreeBase extends EventDispatcher {
76
76
 
77
77
  renderer.domElement.id = generateUUID();
78
78
  renderer.localClippingEnabled = true;
79
+ renderer.outputColorSpace = NoColorSpace;
79
80
  renderer.setPixelRatio(window.devicePixelRatio);
80
81
  renderer.autoClear = false;
81
82
  renderer.clear();
@@ -113,9 +114,6 @@ export default class ThreeBase extends EventDispatcher {
113
114
  div.innerHTML = "";
114
115
  div.append(this.renderer.domElement);
115
116
 
116
- // this.renderer.forceContextLoss();
117
- // await new Promise(resolve => requestAnimationFrame(resolve));
118
- // await new Promise(resolve => requestAnimationFrame(resolve));
119
117
  this.renderer.forceContextRestore();
120
118
  this.renderer.domElement.style.opacity = "1";
121
119
 
@@ -137,8 +135,13 @@ export default class ThreeBase extends EventDispatcher {
137
135
  this.renderer.setPixelRatio(window.devicePixelRatio);
138
136
  this.renderer.setSize(width, height);
139
137
 
138
+ // 设置帧缓存区的尺寸
140
139
  this.baseRenderTarget.setSize(width * window.devicePixelRatio, height * window.devicePixelRatio);
141
140
 
141
+ // 设置深度纹理的尺寸
142
+ this.baseDepthTexture.image.width = width * window.devicePixelRatio;
143
+ this.baseDepthTexture.image.height = height * window.devicePixelRatio;
144
+
142
145
  this.size.set(width, height);
143
146
  // 渲染场景
144
147
  // this.renderer.clear();
@@ -169,11 +172,11 @@ export default class ThreeBase extends EventDispatcher {
169
172
  const controlsPosition = new Transition({ x: 100, y: 100, z: 100 });
170
173
  controlsPosition.setDuration(1000);
171
174
  controlsPosition.onChange(({ x, y, z }) => {
172
- const distance = this.controlsDistance.get("distance");
175
+ // const distance = this.controlsDistance.get("distance");
173
176
  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
+ // .sub(this.controls.target)
178
+ // .setLength(distance)
179
+ // .add(this.controls.target);
177
180
 
178
181
  // // 创建初始方向向量
179
182
  // const directionVecA = new THREE.Vector3(1, 0, 0); // 需要旋转的初始方向向量
@@ -375,16 +378,17 @@ export default class ThreeBase extends EventDispatcher {
375
378
  // 渲染场景
376
379
  this.dispatchEvent({ type: "beforeRender" } as never);
377
380
 
378
- // this.renderer.setRenderTarget(this.baseRenderTarget);
381
+ // 把基础场景渲染到 帧缓冲区 在后期通道中会用到
382
+ this.renderer.setRenderTarget(this.baseRenderTarget);
379
383
  this.renderer.clear();
380
384
  this.renderer.render(this.scene, this.camera);
381
385
 
382
- // this.renderer.setRenderTarget(null);
383
- // this.renderer.clear();
386
+ // 清空主画布
387
+ this.renderer.setRenderTarget(null);
388
+ this.renderer.clear();
384
389
 
385
- //TODO 渲染了2次, 还有优化空间
386
390
  // this.renderer.setScissorTest(false);
387
- // this.renderRendererTarget(this.baseRenderTarget);
391
+ this.renderRendererTarget(this.baseRenderTarget);
388
392
  // this.renderer.setScissorTest(true);
389
393
  // this.renderer.setScissor(0, 0, 800, 1000);
390
394
  // this.renderer.render(this.scene, this.camera);
@@ -542,7 +546,7 @@ export default class ThreeBase extends EventDispatcher {
542
546
  this.renderTargetgaussBlur(renderTarget, 1, 1);
543
547
  }
544
548
 
545
- // 渲染 渲染目标
549
+ // TODO 需要做康锯齿处理 渲染 渲染目标
546
550
  renderRendererTarget(renderTarget: WebGLRenderTarget, alpha: boolean = false) {
547
551
  coptyShader.uniforms.map.value = renderTarget.texture;
548
552
  coptyShader.uniforms.opacity.value = 1.0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "three-base",
3
- "version": "2.0.21",
3
+ "version": "2.0.22",
4
4
  "description": "three 3d three-base",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"