three-base 2.0.107 → 2.0.108
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/InstancedMeshBase.d.ts +1 -1
- package/ThreeBase.js +3 -0
- package/keyContorls.d.ts +1 -1
- package/package.json +1 -1
- package/pass/bloom_pass.d.ts +2 -0
- package/pass/bloom_pass.js +33 -0
- package/pass/cover_pass.js +30 -22
- package/pass/bool_pass.d.ts +0 -0
- package/pass/bool_pass.js +0 -7
package/InstancedMeshBase.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export default class InstancedMeshBase extends MeshBase {
|
|
|
18
18
|
instanceColor: InstancedBufferAttribute;
|
|
19
19
|
reset(...object: Object3D[]): this;
|
|
20
20
|
loadModel(url: string | File | Array<File>, filename?: string): Promise<void>;
|
|
21
|
-
computeBoundingSphere: import("lodash").
|
|
21
|
+
computeBoundingSphere: import("lodash").DebouncedFunc<() => void>;
|
|
22
22
|
setCount(count?: number): Promise<void>;
|
|
23
23
|
setMatrixAt(index: number, matrix?: Matrix4): Promise<void>;
|
|
24
24
|
setTRS(index: number, { position, rotation, scale, }: {
|
package/ThreeBase.js
CHANGED
|
@@ -16,6 +16,7 @@ import { baseTextureToRenderShader, clearShader, copyShader, fullScreenMesh, gau
|
|
|
16
16
|
import threeLoader from "./threeLoader";
|
|
17
17
|
import threeUtils from "./threeUtils";
|
|
18
18
|
import cover_pass from "./pass/cover_pass";
|
|
19
|
+
import bloom_pass from "./pass/bloom_pass";
|
|
19
20
|
// three.js 的基础对象
|
|
20
21
|
export default class ThreeBase extends EventDispatcher {
|
|
21
22
|
constructor() {
|
|
@@ -492,6 +493,8 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
492
493
|
glow_pass(this.renderer, camera, obj, this.baseDepthTexture);
|
|
493
494
|
cover_pass(this.renderer, camera, obj, this.baseDepthTexture);
|
|
494
495
|
});
|
|
496
|
+
//后处理发光特效
|
|
497
|
+
bloom_pass(this.renderer, camera, this.scene, this.baseDepthTexture);
|
|
495
498
|
this.dispatchEvent({ type: "afterRender" });
|
|
496
499
|
}
|
|
497
500
|
renderBindThis = this.render.bind(this);
|
package/keyContorls.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ declare class KeyContorls extends EventDispatcher {
|
|
|
16
16
|
_listeners?: {
|
|
17
17
|
[key: string]: Array<any>;
|
|
18
18
|
};
|
|
19
|
-
removeEvent: import("lodash").
|
|
19
|
+
removeEvent: import("lodash").DebouncedFunc<(type: string) => void>;
|
|
20
20
|
addEventListener<T extends string>(type: T, listener: EventListener<{}, T, this>): void;
|
|
21
21
|
addEvent(): void;
|
|
22
22
|
dispose(): void;
|
package/package.json
CHANGED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: xiaosihan
|
|
3
|
+
* @Date: 2024-09-23 21:51:29
|
|
4
|
+
* @Last Modified by: xiaosihan
|
|
5
|
+
* @Last Modified time: 2024-09-23 21:51:29
|
|
6
|
+
*/
|
|
7
|
+
import { DepthTexture, DepthFormat, LinearFilter, RGBAFormat, UnsignedShortType, WebGLRenderTarget, } from "three";
|
|
8
|
+
// 选中对象的深度纹理
|
|
9
|
+
const selectDepthTexture = (() => {
|
|
10
|
+
const baseDepthTexture = new DepthTexture(4096, 4096);
|
|
11
|
+
baseDepthTexture.format = DepthFormat;
|
|
12
|
+
baseDepthTexture.type = UnsignedShortType;
|
|
13
|
+
baseDepthTexture.anisotropy = 16;
|
|
14
|
+
return baseDepthTexture;
|
|
15
|
+
})();
|
|
16
|
+
// 选中对象的纹理
|
|
17
|
+
const selectTextureTarget = new WebGLRenderTarget(512, 512, {
|
|
18
|
+
minFilter: LinearFilter,
|
|
19
|
+
magFilter: LinearFilter,
|
|
20
|
+
format: RGBAFormat,
|
|
21
|
+
depthTexture: selectDepthTexture,
|
|
22
|
+
anisotropy: 16,
|
|
23
|
+
});
|
|
24
|
+
// 深度测试后的选中纹理
|
|
25
|
+
const selectDethpTestTextureTarget = new WebGLRenderTarget(512, 512, {
|
|
26
|
+
minFilter: LinearFilter,
|
|
27
|
+
magFilter: LinearFilter,
|
|
28
|
+
format: RGBAFormat,
|
|
29
|
+
anisotropy: 16,
|
|
30
|
+
});
|
|
31
|
+
// 发光后期通道
|
|
32
|
+
export default function bloom_pass(renderer, camera, scene, baseDepthTexture) {
|
|
33
|
+
}
|
package/pass/cover_pass.js
CHANGED
|
@@ -10,12 +10,11 @@
|
|
|
10
10
|
* @Last Modified by: xiaosihan
|
|
11
11
|
* @Last Modified time: 2023-05-09 02:33:28
|
|
12
12
|
*/
|
|
13
|
-
import { Color, DepthFormat, DepthTexture, LinearFilter,
|
|
14
|
-
import copyShader from "../shaders/copyShader";
|
|
13
|
+
import { Color, DepthFormat, DepthTexture, LinearFilter, RGBAFormat, Scene, ShaderChunk, ShaderMaterial, UnsignedShortType, Vector2, WebGLRenderTarget, } from "three";
|
|
15
14
|
import FullScreenQuad from "./FullScreenQuad";
|
|
16
15
|
// 选中对象的深度纹理
|
|
17
16
|
const selectDepthTexture = (() => {
|
|
18
|
-
const baseDepthTexture = new DepthTexture(
|
|
17
|
+
const baseDepthTexture = new DepthTexture(1024, 1024);
|
|
19
18
|
baseDepthTexture.format = DepthFormat;
|
|
20
19
|
baseDepthTexture.type = UnsignedShortType;
|
|
21
20
|
baseDepthTexture.anisotropy = 16;
|
|
@@ -47,7 +46,9 @@ const fsQuad = new FullScreenQuad(); // 渲染辅助器
|
|
|
47
46
|
//深度比对纹理
|
|
48
47
|
const depthTestShader = new ShaderMaterial({
|
|
49
48
|
uniforms: {
|
|
50
|
-
color: { value: new Color("#
|
|
49
|
+
color: { value: new Color("#440000") },
|
|
50
|
+
opacity: { value: 1 },
|
|
51
|
+
depthTest: { value: true },
|
|
51
52
|
baseDepth: { value: null },
|
|
52
53
|
selectDepth: { value: null }, // 选中的对象深度纹理
|
|
53
54
|
},
|
|
@@ -66,21 +67,31 @@ const depthTestShader = new ShaderMaterial({
|
|
|
66
67
|
fragmentShader: `
|
|
67
68
|
${ShaderChunk.logdepthbuf_pars_fragment}
|
|
68
69
|
uniform vec3 color;
|
|
70
|
+
uniform float opacity;
|
|
71
|
+
uniform bool depthTest;
|
|
69
72
|
uniform sampler2D baseDepth;
|
|
70
73
|
uniform sampler2D selectDepth;
|
|
71
74
|
varying vec2 vUv;
|
|
72
75
|
void main() {
|
|
73
|
-
if(
|
|
74
|
-
|
|
76
|
+
if( depthTest ){
|
|
77
|
+
if(texture2D(baseDepth, vUv).r + 0.0001 < texture2D(selectDepth, vUv).r){
|
|
78
|
+
discard;
|
|
79
|
+
}
|
|
80
|
+
if(texture2D(baseDepth, vUv).r == 1.0){
|
|
81
|
+
discard;
|
|
82
|
+
}
|
|
83
|
+
gl_FragColor = vec4(color, opacity);
|
|
84
|
+
}else{
|
|
85
|
+
if(texture2D(selectDepth, vUv).r < 1.0){
|
|
86
|
+
gl_FragColor = vec4(color, opacity);
|
|
87
|
+
}else{
|
|
88
|
+
discard;
|
|
89
|
+
}
|
|
75
90
|
}
|
|
76
|
-
|
|
77
|
-
discard;
|
|
78
|
-
}
|
|
79
|
-
gl_FragColor = vec4(color, 1.0);
|
|
91
|
+
|
|
80
92
|
${ShaderChunk.logdepthbuf_fragment}
|
|
81
93
|
}
|
|
82
94
|
`,
|
|
83
|
-
blending: NoBlending,
|
|
84
95
|
depthTest: true,
|
|
85
96
|
depthWrite: true,
|
|
86
97
|
transparent: true,
|
|
@@ -89,7 +100,8 @@ const depthTestShader = new ShaderMaterial({
|
|
|
89
100
|
const scene = new Scene();
|
|
90
101
|
// 给模型覆盖一层颜色 后处理通道
|
|
91
102
|
export default function cover_pass(renderer, camera, object3d, baseDepthTexture) {
|
|
92
|
-
const { cover_enable = false, cover_color = "#04fa12", cover_opacity = 1,
|
|
103
|
+
const { cover_enable = false, cover_color = "#04fa12", cover_opacity = 1, cover_depth_test = true, // 颜色叠加是否开启深度测试
|
|
104
|
+
} = object3d.userData;
|
|
93
105
|
if (!cover_enable || cover_opacity === 0) {
|
|
94
106
|
return;
|
|
95
107
|
}
|
|
@@ -105,23 +117,19 @@ export default function cover_pass(renderer, camera, object3d, baseDepthTexture)
|
|
|
105
117
|
scene.children = [object3d];
|
|
106
118
|
renderer.clear();
|
|
107
119
|
renderer.render(scene, camera);
|
|
108
|
-
|
|
109
|
-
renderer.setRenderTarget(
|
|
110
|
-
renderer.
|
|
120
|
+
//更具深度测试绘制叠加颜色
|
|
121
|
+
renderer.setRenderTarget(originRenderTarget);
|
|
122
|
+
renderer.clearDepth();
|
|
111
123
|
depthTestShader.uniforms.color.value.set(cover_color);
|
|
124
|
+
depthTestShader.uniforms.opacity.value = cover_opacity;
|
|
125
|
+
depthTestShader.uniforms.depthTest.value = cover_depth_test;
|
|
112
126
|
depthTestShader.uniforms.baseDepth.value = baseDepthTexture;
|
|
113
127
|
depthTestShader.uniforms.selectDepth.value = selectDepthTexture;
|
|
114
128
|
fsQuad.render(renderer, depthTestShader);
|
|
115
|
-
// 颜色覆盖绘制到着色器
|
|
116
|
-
renderer.setRenderTarget(originRenderTarget);
|
|
117
|
-
renderer.clearDepth();
|
|
118
|
-
copyShader.uniforms.map.value = selectDethpTestTextureTarget.texture;
|
|
119
|
-
copyShader.uniforms.opacity.value = cover_opacity;
|
|
120
|
-
fsQuad.render(renderer, copyShader);
|
|
121
129
|
// 调试代码
|
|
122
130
|
// renderer.setRenderTarget(null);
|
|
123
131
|
// renderer.clearDepth();
|
|
124
|
-
// copyShader.uniforms.
|
|
132
|
+
// copyShader.uniforms.map.value = blur2TextureTarget.texture;
|
|
125
133
|
// fsQuad.render(renderer, copyShader);
|
|
126
134
|
// return;
|
|
127
135
|
}
|
package/pass/bool_pass.d.ts
DELETED
|
File without changes
|