bg2e-js 2.3.11 → 2.3.13
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/dist/bg2e-js.js +356 -326
- package/dist/bg2e-js.js.map +1 -1
- package/package.json +56 -56
- package/src/app/AppController.ts +39 -39
- package/src/app/Bg2KeyboardEvent.ts +54 -54
- package/src/app/Bg2MouseEvent.ts +82 -82
- package/src/app/Bg2TouchEvent.ts +18 -18
- package/src/app/Canvas.ts +108 -108
- package/src/app/EventBase.ts +10 -10
- package/src/app/MainLoop.ts +273 -273
- package/src/app/index.ts +24 -24
- package/src/base/Color.ts +134 -134
- package/src/base/Environment.ts +183 -183
- package/src/base/Light.ts +192 -192
- package/src/base/Material.ts +620 -620
- package/src/base/PolyList.ts +365 -365
- package/src/base/Texture.ts +620 -620
- package/src/base/index.ts +81 -81
- package/src/db/Bg2LoaderPlugin.ts +143 -143
- package/src/db/DBPluginApi.ts +48 -48
- package/src/db/Loader.ts +116 -116
- package/src/db/LoaderPlugin.ts +34 -34
- package/src/db/MtlParser.ts +7 -7
- package/src/db/ObjLoaderPlugin.ts +54 -54
- package/src/db/ObjParser.ts +252 -252
- package/src/db/ObjWriterPlugin.ts +18 -18
- package/src/db/VitscnjLoaderPlugin.ts +112 -112
- package/src/db/Writer.ts +52 -52
- package/src/db/WriterPlugin.ts +22 -22
- package/src/db/index.ts +44 -44
- package/src/debug/DebugRenderer.ts +173 -173
- package/src/debug/WebGLTextureViewer.ts +75 -75
- package/src/debug/index.ts +6 -6
- package/src/index.html +11 -11
- package/src/index.ts +33 -33
- package/src/manipulation/SelectionBuffer.ts +81 -81
- package/src/manipulation/SelectionHighlight.ts +105 -84
- package/src/manipulation/SelectionIdAssignVisitor.ts +96 -96
- package/src/manipulation/SelectionManager.ts +196 -188
- package/src/manipulation/SelectionMode.ts +6 -6
- package/src/math/Mat3.ts +259 -259
- package/src/math/Mat4.ts +710 -710
- package/src/math/MatrixStrategy.ts +25 -25
- package/src/math/Quat.ts +65 -65
- package/src/math/Vec.ts +753 -753
- package/src/math/constants.ts +46 -46
- package/src/math/functions.ts +103 -103
- package/src/math/index.ts +74 -74
- package/src/phsics/joint.ts +137 -137
- package/src/primitives/arrow.ts +57 -57
- package/src/primitives/cone.ts +138 -138
- package/src/primitives/cube.ts +60 -60
- package/src/primitives/cylinder.ts +216 -216
- package/src/primitives/index.ts +13 -13
- package/src/primitives/plane.ts +31 -31
- package/src/primitives/sphere.ts +809 -809
- package/src/react/useBg2e.ts +69 -69
- package/src/render/BRDFIntegrationMap.ts +4 -4
- package/src/render/Environment.ts +135 -135
- package/src/render/FrameBuffer.ts +35 -35
- package/src/render/MaterialRenderer.ts +34 -34
- package/src/render/Pipeline.ts +108 -108
- package/src/render/PolyListRenderer.ts +47 -47
- package/src/render/RenderBuffer.ts +197 -197
- package/src/render/RenderQueue.ts +198 -198
- package/src/render/RenderState.ts +116 -116
- package/src/render/Renderer.ts +248 -248
- package/src/render/SceneAppController.ts +250 -250
- package/src/render/SceneRenderer.ts +387 -387
- package/src/render/Shader.ts +32 -32
- package/src/render/ShadowRenderer.ts +176 -176
- package/src/render/SkyCube.ts +105 -105
- package/src/render/SkySphere.ts +117 -117
- package/src/render/TextureMergerRenderer.ts +70 -70
- package/src/render/TextureRenderer.ts +34 -34
- package/src/render/index.ts +67 -67
- package/src/render/webgl/FrameBuffer.ts +9 -9
- package/src/render/webgl/MaterialRenderer.ts +112 -112
- package/src/render/webgl/Pipeline.ts +88 -88
- package/src/render/webgl/PolyListRenderer.ts +260 -260
- package/src/render/webgl/RenderBuffer.ts +226 -226
- package/src/render/webgl/Renderer.ts +262 -262
- package/src/render/webgl/SceneRenderer.ts +67 -67
- package/src/render/webgl/ShaderProgram.ts +424 -424
- package/src/render/webgl/ShadowRenderer.ts +6 -6
- package/src/render/webgl/SkyCube.ts +15 -15
- package/src/render/webgl/SkySphere.ts +15 -15
- package/src/render/webgl/State.ts +152 -152
- package/src/render/webgl/TextureRenderer.ts +167 -167
- package/src/render/webgl/VertexBuffer.ts +137 -137
- package/src/render/webgl/index.ts +35 -35
- package/src/scene/Camera.ts +458 -458
- package/src/scene/Chain.ts +44 -44
- package/src/scene/ChainJoint.ts +58 -58
- package/src/scene/Component.ts +177 -177
- package/src/scene/ComponentMap.ts +106 -106
- package/src/scene/Drawable.ts +154 -154
- package/src/scene/EnvironmentComponent.ts +141 -141
- package/src/scene/FindNodeVisitor.ts +59 -59
- package/src/scene/LightComponent.ts +154 -154
- package/src/scene/MatrixState.ts +46 -46
- package/src/scene/Node.ts +328 -328
- package/src/scene/NodeVisitor.ts +15 -15
- package/src/scene/OrbitCameraController.ts +450 -450
- package/src/scene/SmoothOrbitCameraController.ts +99 -99
- package/src/scene/Transform.ts +73 -73
- package/src/scene/index.ts +60 -60
- package/src/shaders/BasicDiffuseColorShader.ts +111 -111
- package/src/shaders/BasicPBRLightShader.ts +276 -276
- package/src/shaders/DebugRenderShader.ts +97 -97
- package/src/shaders/DepthRenderShader.ts +127 -127
- package/src/shaders/IrradianceMapCubeShader.ts +115 -115
- package/src/shaders/PBRLightIBLShader.ts +486 -486
- package/src/shaders/PickSelectionShader.ts +101 -101
- package/src/shaders/PresentDebugFramebufferShader.ts +118 -118
- package/src/shaders/PresentTextureShader.ts +99 -99
- package/src/shaders/SelectionHighlightShader.ts +143 -127
- package/src/shaders/ShaderFunction.ts +318 -318
- package/src/shaders/SkyCubeShader.ts +93 -93
- package/src/shaders/SkySphereShader.ts +102 -102
- package/src/shaders/SpecularMapCubeShader.ts +164 -164
- package/src/shaders/TextureMergerShader.ts +171 -171
- package/src/shaders/index.ts +36 -36
- package/src/shaders/webgl/color_correction.glsl +47 -47
- package/src/shaders/webgl/constants.glsl +6 -6
- package/src/shaders/webgl/index.ts +70 -70
- package/src/shaders/webgl/normal_map.glsl +9 -9
- package/src/shaders/webgl/pbr.glsl +173 -173
- package/src/shaders/webgl/uniforms.glsl +91 -91
- package/src/shaders/webgl_shader_lib.ts +213 -213
- package/src/tools/BinaryResourceProvider.ts +14 -14
- package/src/tools/ImageResourceProvider.ts +66 -66
- package/src/tools/MaterialModifier.ts +446 -446
- package/src/tools/Resource.ts +203 -203
- package/src/tools/ResourceProvider.ts +69 -69
- package/src/tools/TextResourceProvider.ts +24 -24
- package/src/tools/TextureCache.ts +51 -51
- package/src/tools/TextureResourceDatabase.ts +100 -100
- package/src/tools/UserAgent.ts +362 -362
- package/src/tools/VideoResourceProvider.ts +50 -50
- package/src/tools/WriteStrategy.ts +22 -22
- package/src/tools/base64.ts +11 -11
- package/src/tools/crypto.ts +19 -19
- package/src/tools/endiantess.ts +13 -13
- package/src/tools/image.ts +18 -18
- package/src/tools/index.ts +41 -41
- package/src/tools/processType.ts +39 -39
- package/src/vite-env.d.ts +12 -12
package/src/base/Color.ts
CHANGED
|
@@ -1,134 +1,134 @@
|
|
|
1
|
-
import Vec from '../math/Vec';
|
|
2
|
-
|
|
3
|
-
const checkLength = (v1: ArrayLike<number>, v2: ArrayLike<number> | null = null): void => {
|
|
4
|
-
if (v1.length < 4 || (v2 !== null && v2.length < 4)) {
|
|
5
|
-
throw new Error(`Invalid color component length`);
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
interface ColorInitObject {
|
|
10
|
-
r?: number;
|
|
11
|
-
g?: number;
|
|
12
|
-
b?: number;
|
|
13
|
-
a?: number;
|
|
14
|
-
rgb?: number;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export default class Color extends Vec {
|
|
18
|
-
constructor();
|
|
19
|
-
constructor(rgba: ArrayLike<number>);
|
|
20
|
-
constructor(init: ColorInitObject);
|
|
21
|
-
constructor(...args: any[]) {
|
|
22
|
-
if (args.length === 1 && args[0].length === 4) {
|
|
23
|
-
// 4 elements array
|
|
24
|
-
super(args[0]);
|
|
25
|
-
}
|
|
26
|
-
else if (args.length === 1 && args[0].length === 3) {
|
|
27
|
-
super(args[0][0], args[0][1], args[0][2], 1);
|
|
28
|
-
}
|
|
29
|
-
else if (typeof(args[0]) === "object" &&
|
|
30
|
-
(args[0].rgb !== undefined ||
|
|
31
|
-
args[0].r !== undefined ||
|
|
32
|
-
args[0].g !== undefined ||
|
|
33
|
-
args[0].b !== undefined ||
|
|
34
|
-
args[0].a !== undefined)
|
|
35
|
-
) {
|
|
36
|
-
const r = args[0].r || args[0].rgb || 0;
|
|
37
|
-
const g = args[0].g || args[0].rgb || 0;
|
|
38
|
-
const b = args[0].b || args[0].rgb || 0;
|
|
39
|
-
const a = args[0].a !== undefined ? args[0].a : 1;
|
|
40
|
-
super(r, g, b, a);
|
|
41
|
-
}
|
|
42
|
-
else if (args.length === 0) {
|
|
43
|
-
super([0, 0, 0, 1]);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
throw new Error('Invalid initialization parameters in Color constructor');
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
static Yellow(): Color { return new Color([1.0,1.0,0.0,1.0]); }
|
|
51
|
-
static Orange(): Color { return new Color([1.0,0.5,0.0,1.0]); }
|
|
52
|
-
static Red(): Color { return new Color([1.0,0.0,0.0,1.0]); }
|
|
53
|
-
static Violet(): Color { return new Color([0.5,0.0,1.0,1.0]); }
|
|
54
|
-
static Blue(): Color { return new Color([0.0,0.0,1.0,1.0]); }
|
|
55
|
-
static Green(): Color { return new Color([0.0,1.0,0.0,1.0]); }
|
|
56
|
-
static White(): Color { return new Color([1.0,1.0,1.0,1.0]); }
|
|
57
|
-
static LightGray(): Color { return new Color([0.8,0.8,0.8,1.0]); }
|
|
58
|
-
static Gray(): Color { return new Color([0.5,0.5,0.5,1.0]); }
|
|
59
|
-
static DarkGray(): Color { return new Color([0.2,0.2,0.2,1.0]); }
|
|
60
|
-
static Black(): Color { return new Color([0.0,0.0,0.0,1.0]); }
|
|
61
|
-
static Brown(): Color { return new Color([0.4,0.2,0.0,1.0]); }
|
|
62
|
-
static Transparent(): Color { return new Color([0,0,0,0]); }
|
|
63
|
-
|
|
64
|
-
get r(): number { return this[0]; }
|
|
65
|
-
set r(v: number) { this[0] = v; }
|
|
66
|
-
get g(): number { return this[1]; }
|
|
67
|
-
set g(v: number) { this[1] = v; }
|
|
68
|
-
get b(): number { return this[2]; }
|
|
69
|
-
set b(v: number) { this[2] = v; }
|
|
70
|
-
get a(): number { return this[3]; }
|
|
71
|
-
set a(v: number) { this[3] = v; }
|
|
72
|
-
|
|
73
|
-
get rgb(): Vec { return new Vec(this[0], this[1], this[2]); }
|
|
74
|
-
set rgb(rgb: ArrayLike<number>) {
|
|
75
|
-
if (rgb.length === 3) {
|
|
76
|
-
this[0] = rgb[0];
|
|
77
|
-
this[1] = rgb[1];
|
|
78
|
-
this[2] = rgb[2];
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
throw new Error("Invalid parameter settings rgb values in Color");
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
static Max(v1: ArrayLike<number>, v2: ArrayLike<number>): Color {
|
|
86
|
-
checkLength(v1, v2);
|
|
87
|
-
return new Color([
|
|
88
|
-
v1[0]>v2[0] ? v1[0] : v2[0],
|
|
89
|
-
v1[1]>v2[1] ? v1[1] : v2[1],
|
|
90
|
-
v1[2]>v2[2] ? v1[2] : v2[2],
|
|
91
|
-
v1[3]>v2[3] ? v1[3] : v2[3]
|
|
92
|
-
]);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
static Min(v1: ArrayLike<number>, v2: ArrayLike<number>): Color {
|
|
96
|
-
checkLength(v1, v2);
|
|
97
|
-
return new Color([
|
|
98
|
-
v1[0]<v2[0] ? v1[0] : v2[0],
|
|
99
|
-
v1[1]<v2[1] ? v1[1] : v2[1],
|
|
100
|
-
v1[2]<v2[2] ? v1[2] : v2[2],
|
|
101
|
-
v1[3]<v2[3] ? v1[3] : v2[3]
|
|
102
|
-
]);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
static Add(v1: ArrayLike<number>, v2: ArrayLike<number>): Color {
|
|
106
|
-
checkLength(v1, v2);
|
|
107
|
-
return new Color([
|
|
108
|
-
v1[0] + v2[0],
|
|
109
|
-
v1[1] + v2[1],
|
|
110
|
-
v1[2] + v2[2],
|
|
111
|
-
v1[3] + v2[3]
|
|
112
|
-
]);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
static Sub(v1: ArrayLike<number>, v2: ArrayLike<number>): Color {
|
|
116
|
-
checkLength(v1, v2);
|
|
117
|
-
return new Color([
|
|
118
|
-
v1[0] - v2[0],
|
|
119
|
-
v1[1] - v2[1],
|
|
120
|
-
v1[2] - v2[2],
|
|
121
|
-
v1[3] - v2[3]
|
|
122
|
-
]);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
static Mult(v: ArrayLike<number>, s: number): Color {
|
|
126
|
-
checkLength(v);
|
|
127
|
-
return new Color([ v[0] * s, v[1] * s, v[2] * s, v[3] * s ]);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
static Div(v: ArrayLike<number>, s: number): Color {
|
|
131
|
-
checkLength(v);
|
|
132
|
-
return new Color([ v[0] / s, v[1] / s, v[2] / s, v[3] / s ]);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
1
|
+
import Vec from '../math/Vec';
|
|
2
|
+
|
|
3
|
+
const checkLength = (v1: ArrayLike<number>, v2: ArrayLike<number> | null = null): void => {
|
|
4
|
+
if (v1.length < 4 || (v2 !== null && v2.length < 4)) {
|
|
5
|
+
throw new Error(`Invalid color component length`);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface ColorInitObject {
|
|
10
|
+
r?: number;
|
|
11
|
+
g?: number;
|
|
12
|
+
b?: number;
|
|
13
|
+
a?: number;
|
|
14
|
+
rgb?: number;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default class Color extends Vec {
|
|
18
|
+
constructor();
|
|
19
|
+
constructor(rgba: ArrayLike<number>);
|
|
20
|
+
constructor(init: ColorInitObject);
|
|
21
|
+
constructor(...args: any[]) {
|
|
22
|
+
if (args.length === 1 && args[0].length === 4) {
|
|
23
|
+
// 4 elements array
|
|
24
|
+
super(args[0]);
|
|
25
|
+
}
|
|
26
|
+
else if (args.length === 1 && args[0].length === 3) {
|
|
27
|
+
super(args[0][0], args[0][1], args[0][2], 1);
|
|
28
|
+
}
|
|
29
|
+
else if (typeof(args[0]) === "object" &&
|
|
30
|
+
(args[0].rgb !== undefined ||
|
|
31
|
+
args[0].r !== undefined ||
|
|
32
|
+
args[0].g !== undefined ||
|
|
33
|
+
args[0].b !== undefined ||
|
|
34
|
+
args[0].a !== undefined)
|
|
35
|
+
) {
|
|
36
|
+
const r = args[0].r || args[0].rgb || 0;
|
|
37
|
+
const g = args[0].g || args[0].rgb || 0;
|
|
38
|
+
const b = args[0].b || args[0].rgb || 0;
|
|
39
|
+
const a = args[0].a !== undefined ? args[0].a : 1;
|
|
40
|
+
super(r, g, b, a);
|
|
41
|
+
}
|
|
42
|
+
else if (args.length === 0) {
|
|
43
|
+
super([0, 0, 0, 1]);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
throw new Error('Invalid initialization parameters in Color constructor');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
static Yellow(): Color { return new Color([1.0,1.0,0.0,1.0]); }
|
|
51
|
+
static Orange(): Color { return new Color([1.0,0.5,0.0,1.0]); }
|
|
52
|
+
static Red(): Color { return new Color([1.0,0.0,0.0,1.0]); }
|
|
53
|
+
static Violet(): Color { return new Color([0.5,0.0,1.0,1.0]); }
|
|
54
|
+
static Blue(): Color { return new Color([0.0,0.0,1.0,1.0]); }
|
|
55
|
+
static Green(): Color { return new Color([0.0,1.0,0.0,1.0]); }
|
|
56
|
+
static White(): Color { return new Color([1.0,1.0,1.0,1.0]); }
|
|
57
|
+
static LightGray(): Color { return new Color([0.8,0.8,0.8,1.0]); }
|
|
58
|
+
static Gray(): Color { return new Color([0.5,0.5,0.5,1.0]); }
|
|
59
|
+
static DarkGray(): Color { return new Color([0.2,0.2,0.2,1.0]); }
|
|
60
|
+
static Black(): Color { return new Color([0.0,0.0,0.0,1.0]); }
|
|
61
|
+
static Brown(): Color { return new Color([0.4,0.2,0.0,1.0]); }
|
|
62
|
+
static Transparent(): Color { return new Color([0,0,0,0]); }
|
|
63
|
+
|
|
64
|
+
get r(): number { return this[0]; }
|
|
65
|
+
set r(v: number) { this[0] = v; }
|
|
66
|
+
get g(): number { return this[1]; }
|
|
67
|
+
set g(v: number) { this[1] = v; }
|
|
68
|
+
get b(): number { return this[2]; }
|
|
69
|
+
set b(v: number) { this[2] = v; }
|
|
70
|
+
get a(): number { return this[3]; }
|
|
71
|
+
set a(v: number) { this[3] = v; }
|
|
72
|
+
|
|
73
|
+
get rgb(): Vec { return new Vec(this[0], this[1], this[2]); }
|
|
74
|
+
set rgb(rgb: ArrayLike<number>) {
|
|
75
|
+
if (rgb.length === 3) {
|
|
76
|
+
this[0] = rgb[0];
|
|
77
|
+
this[1] = rgb[1];
|
|
78
|
+
this[2] = rgb[2];
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
throw new Error("Invalid parameter settings rgb values in Color");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
static Max(v1: ArrayLike<number>, v2: ArrayLike<number>): Color {
|
|
86
|
+
checkLength(v1, v2);
|
|
87
|
+
return new Color([
|
|
88
|
+
v1[0]>v2[0] ? v1[0] : v2[0],
|
|
89
|
+
v1[1]>v2[1] ? v1[1] : v2[1],
|
|
90
|
+
v1[2]>v2[2] ? v1[2] : v2[2],
|
|
91
|
+
v1[3]>v2[3] ? v1[3] : v2[3]
|
|
92
|
+
]);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
static Min(v1: ArrayLike<number>, v2: ArrayLike<number>): Color {
|
|
96
|
+
checkLength(v1, v2);
|
|
97
|
+
return new Color([
|
|
98
|
+
v1[0]<v2[0] ? v1[0] : v2[0],
|
|
99
|
+
v1[1]<v2[1] ? v1[1] : v2[1],
|
|
100
|
+
v1[2]<v2[2] ? v1[2] : v2[2],
|
|
101
|
+
v1[3]<v2[3] ? v1[3] : v2[3]
|
|
102
|
+
]);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
static Add(v1: ArrayLike<number>, v2: ArrayLike<number>): Color {
|
|
106
|
+
checkLength(v1, v2);
|
|
107
|
+
return new Color([
|
|
108
|
+
v1[0] + v2[0],
|
|
109
|
+
v1[1] + v2[1],
|
|
110
|
+
v1[2] + v2[2],
|
|
111
|
+
v1[3] + v2[3]
|
|
112
|
+
]);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
static Sub(v1: ArrayLike<number>, v2: ArrayLike<number>): Color {
|
|
116
|
+
checkLength(v1, v2);
|
|
117
|
+
return new Color([
|
|
118
|
+
v1[0] - v2[0],
|
|
119
|
+
v1[1] - v2[1],
|
|
120
|
+
v1[2] - v2[2],
|
|
121
|
+
v1[3] - v2[3]
|
|
122
|
+
]);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
static Mult(v: ArrayLike<number>, s: number): Color {
|
|
126
|
+
checkLength(v);
|
|
127
|
+
return new Color([ v[0] * s, v[1] * s, v[2] * s, v[3] * s ]);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
static Div(v: ArrayLike<number>, s: number): Color {
|
|
131
|
+
checkLength(v);
|
|
132
|
+
return new Color([ v[0] / s, v[1] / s, v[2] / s, v[3] / s ]);
|
|
133
|
+
}
|
|
134
|
+
}
|
package/src/base/Environment.ts
CHANGED
|
@@ -1,183 +1,183 @@
|
|
|
1
|
-
import Texture from './Texture';
|
|
2
|
-
import type Renderer from '../render/Renderer';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Serializable data for Environment.
|
|
6
|
-
* Properties are optional because deserialization commonly receives partial objects.
|
|
7
|
-
*/
|
|
8
|
-
export interface EnvironmentSceneData {
|
|
9
|
-
equirectangularTexture?: Texture | null;
|
|
10
|
-
irradianceIntensity?: number;
|
|
11
|
-
showSkybox?: boolean;
|
|
12
|
-
cubemapSize?: number;
|
|
13
|
-
irradianceMapSize?: number;
|
|
14
|
-
specularMapSize?: number;
|
|
15
|
-
specularMapL2Size?: number;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Environment configuration for image-based lighting and skybox rendering.
|
|
20
|
-
*/
|
|
21
|
-
export default class Environment {
|
|
22
|
-
private _equirectangularTexture: Texture | null;
|
|
23
|
-
private _irradianceIntensity: number;
|
|
24
|
-
private _showSkybox: boolean;
|
|
25
|
-
private _cubemapSize: number;
|
|
26
|
-
private _irradianceMapSize: number;
|
|
27
|
-
private _specularMapSize: number;
|
|
28
|
-
private _specularMapL2Size: number;
|
|
29
|
-
private _dirty: boolean;
|
|
30
|
-
|
|
31
|
-
constructor() {
|
|
32
|
-
this._equirectangularTexture = null;
|
|
33
|
-
this._irradianceIntensity = 1;
|
|
34
|
-
this._showSkybox = true;
|
|
35
|
-
this._cubemapSize = 512;
|
|
36
|
-
this._irradianceMapSize = 32;
|
|
37
|
-
this._specularMapSize = 32;
|
|
38
|
-
this._specularMapL2Size = 32;
|
|
39
|
-
this._dirty = true;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Equirectangular texture used for environment mapping
|
|
44
|
-
*/
|
|
45
|
-
get equirectangularTexture(): Texture | null {
|
|
46
|
-
return this._equirectangularTexture;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
set equirectangularTexture(t: Texture | null) {
|
|
50
|
-
this._equirectangularTexture = t;
|
|
51
|
-
this._dirty = true;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Intensity multiplier for irradiance calculations
|
|
56
|
-
*/
|
|
57
|
-
get irradianceIntensity(): number {
|
|
58
|
-
return this._irradianceIntensity;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
set irradianceIntensity(value: number) {
|
|
62
|
-
this._irradianceIntensity = value;
|
|
63
|
-
this._dirty = true;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Whether to display the skybox
|
|
68
|
-
*/
|
|
69
|
-
get showSkybox(): boolean {
|
|
70
|
-
return this._showSkybox;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
set showSkybox(value: boolean) {
|
|
74
|
-
this._showSkybox = value;
|
|
75
|
-
this._dirty = true;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Resolution of the environment cubemap
|
|
80
|
-
*/
|
|
81
|
-
get cubemapSize(): number {
|
|
82
|
-
return this._cubemapSize;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
set cubemapSize(value: number) {
|
|
86
|
-
this._cubemapSize = value;
|
|
87
|
-
this._dirty = true;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Resolution of the irradiance map
|
|
92
|
-
*/
|
|
93
|
-
get irradianceMapSize(): number {
|
|
94
|
-
return this._irradianceMapSize;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
set irradianceMapSize(value: number) {
|
|
98
|
-
this._irradianceMapSize = value;
|
|
99
|
-
this._dirty = true;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Resolution of the specular map
|
|
104
|
-
*/
|
|
105
|
-
get specularMapSize(): number {
|
|
106
|
-
return this._specularMapSize;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
set specularMapSize(value: number) {
|
|
110
|
-
this._specularMapSize = value;
|
|
111
|
-
this._dirty = true;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Resolution of the second level specular map
|
|
116
|
-
*/
|
|
117
|
-
get specularMapL2Size(): number {
|
|
118
|
-
return this._specularMapL2Size;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
set specularMapL2Size(value: number) {
|
|
122
|
-
this._specularMapL2Size = value;
|
|
123
|
-
this._dirty = true;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Destroys the renderer resources
|
|
128
|
-
*/
|
|
129
|
-
destroy(): void {
|
|
130
|
-
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Creates a deep copy of this environment
|
|
135
|
-
*/
|
|
136
|
-
clone(): Environment {
|
|
137
|
-
const result = new Environment();
|
|
138
|
-
result.assign(this);
|
|
139
|
-
return result;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Copies properties from another environment instance
|
|
144
|
-
* @param other - The environment to copy from
|
|
145
|
-
*/
|
|
146
|
-
assign(other: Environment): void {
|
|
147
|
-
this.equirectangularTexture = other.equirectangularTexture;
|
|
148
|
-
this.irradianceIntensity = other.irradianceIntensity;
|
|
149
|
-
this.showSkybox = other.showSkybox;
|
|
150
|
-
this.cubemapSize = other.cubemapSize;
|
|
151
|
-
this.irradianceMapSize = other.irradianceMapSize;
|
|
152
|
-
this.specularMapSize = other.specularMapSize;
|
|
153
|
-
this.specularMapL2Size = other.specularMapL2Size;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Deserializes environment data from a scene data object
|
|
158
|
-
* @param sceneData - The serialized environment data
|
|
159
|
-
*/
|
|
160
|
-
async deserialize(sceneData: EnvironmentSceneData): Promise<void> {
|
|
161
|
-
this.equirectangularTexture = sceneData.equirectangularTexture || this.equirectangularTexture;
|
|
162
|
-
this.irradianceIntensity = sceneData.irradianceIntensity || this.irradianceIntensity;
|
|
163
|
-
this.showSkybox = sceneData.showSkybox || this.showSkybox;
|
|
164
|
-
this.cubemapSize = sceneData.cubemapSize || this.cubemapSize;
|
|
165
|
-
this.irradianceMapSize = sceneData.irradianceMapSize || this.irradianceMapSize;
|
|
166
|
-
this.specularMapSize = sceneData.specularMapSize || this.specularMapSize;
|
|
167
|
-
this.specularMapL2Size = sceneData.specularMapL2Size || this.specularMapL2Size;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Serializes environment data to a scene data object
|
|
172
|
-
* @param sceneData - The object to populate with serialized data
|
|
173
|
-
*/
|
|
174
|
-
async serialize(sceneData: EnvironmentSceneData): Promise<void> {
|
|
175
|
-
sceneData.equirectangularTexture = this.equirectangularTexture;
|
|
176
|
-
sceneData.irradianceIntensity = this.irradianceIntensity;
|
|
177
|
-
sceneData.showSkybox = this.showSkybox;
|
|
178
|
-
sceneData.cubemapSize = this.cubemapSize;
|
|
179
|
-
sceneData.irradianceMapSize = this.irradianceMapSize;
|
|
180
|
-
sceneData.specularMapSize = this.specularMapSize;
|
|
181
|
-
sceneData.specularMapL2Size = this.specularMapL2Size;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
1
|
+
import Texture from './Texture';
|
|
2
|
+
import type Renderer from '../render/Renderer';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Serializable data for Environment.
|
|
6
|
+
* Properties are optional because deserialization commonly receives partial objects.
|
|
7
|
+
*/
|
|
8
|
+
export interface EnvironmentSceneData {
|
|
9
|
+
equirectangularTexture?: Texture | null;
|
|
10
|
+
irradianceIntensity?: number;
|
|
11
|
+
showSkybox?: boolean;
|
|
12
|
+
cubemapSize?: number;
|
|
13
|
+
irradianceMapSize?: number;
|
|
14
|
+
specularMapSize?: number;
|
|
15
|
+
specularMapL2Size?: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Environment configuration for image-based lighting and skybox rendering.
|
|
20
|
+
*/
|
|
21
|
+
export default class Environment {
|
|
22
|
+
private _equirectangularTexture: Texture | null;
|
|
23
|
+
private _irradianceIntensity: number;
|
|
24
|
+
private _showSkybox: boolean;
|
|
25
|
+
private _cubemapSize: number;
|
|
26
|
+
private _irradianceMapSize: number;
|
|
27
|
+
private _specularMapSize: number;
|
|
28
|
+
private _specularMapL2Size: number;
|
|
29
|
+
private _dirty: boolean;
|
|
30
|
+
|
|
31
|
+
constructor() {
|
|
32
|
+
this._equirectangularTexture = null;
|
|
33
|
+
this._irradianceIntensity = 1;
|
|
34
|
+
this._showSkybox = true;
|
|
35
|
+
this._cubemapSize = 512;
|
|
36
|
+
this._irradianceMapSize = 32;
|
|
37
|
+
this._specularMapSize = 32;
|
|
38
|
+
this._specularMapL2Size = 32;
|
|
39
|
+
this._dirty = true;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Equirectangular texture used for environment mapping
|
|
44
|
+
*/
|
|
45
|
+
get equirectangularTexture(): Texture | null {
|
|
46
|
+
return this._equirectangularTexture;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
set equirectangularTexture(t: Texture | null) {
|
|
50
|
+
this._equirectangularTexture = t;
|
|
51
|
+
this._dirty = true;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Intensity multiplier for irradiance calculations
|
|
56
|
+
*/
|
|
57
|
+
get irradianceIntensity(): number {
|
|
58
|
+
return this._irradianceIntensity;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
set irradianceIntensity(value: number) {
|
|
62
|
+
this._irradianceIntensity = value;
|
|
63
|
+
this._dirty = true;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Whether to display the skybox
|
|
68
|
+
*/
|
|
69
|
+
get showSkybox(): boolean {
|
|
70
|
+
return this._showSkybox;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
set showSkybox(value: boolean) {
|
|
74
|
+
this._showSkybox = value;
|
|
75
|
+
this._dirty = true;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Resolution of the environment cubemap
|
|
80
|
+
*/
|
|
81
|
+
get cubemapSize(): number {
|
|
82
|
+
return this._cubemapSize;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
set cubemapSize(value: number) {
|
|
86
|
+
this._cubemapSize = value;
|
|
87
|
+
this._dirty = true;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Resolution of the irradiance map
|
|
92
|
+
*/
|
|
93
|
+
get irradianceMapSize(): number {
|
|
94
|
+
return this._irradianceMapSize;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
set irradianceMapSize(value: number) {
|
|
98
|
+
this._irradianceMapSize = value;
|
|
99
|
+
this._dirty = true;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Resolution of the specular map
|
|
104
|
+
*/
|
|
105
|
+
get specularMapSize(): number {
|
|
106
|
+
return this._specularMapSize;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
set specularMapSize(value: number) {
|
|
110
|
+
this._specularMapSize = value;
|
|
111
|
+
this._dirty = true;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Resolution of the second level specular map
|
|
116
|
+
*/
|
|
117
|
+
get specularMapL2Size(): number {
|
|
118
|
+
return this._specularMapL2Size;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
set specularMapL2Size(value: number) {
|
|
122
|
+
this._specularMapL2Size = value;
|
|
123
|
+
this._dirty = true;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Destroys the renderer resources
|
|
128
|
+
*/
|
|
129
|
+
destroy(): void {
|
|
130
|
+
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Creates a deep copy of this environment
|
|
135
|
+
*/
|
|
136
|
+
clone(): Environment {
|
|
137
|
+
const result = new Environment();
|
|
138
|
+
result.assign(this);
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Copies properties from another environment instance
|
|
144
|
+
* @param other - The environment to copy from
|
|
145
|
+
*/
|
|
146
|
+
assign(other: Environment): void {
|
|
147
|
+
this.equirectangularTexture = other.equirectangularTexture;
|
|
148
|
+
this.irradianceIntensity = other.irradianceIntensity;
|
|
149
|
+
this.showSkybox = other.showSkybox;
|
|
150
|
+
this.cubemapSize = other.cubemapSize;
|
|
151
|
+
this.irradianceMapSize = other.irradianceMapSize;
|
|
152
|
+
this.specularMapSize = other.specularMapSize;
|
|
153
|
+
this.specularMapL2Size = other.specularMapL2Size;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Deserializes environment data from a scene data object
|
|
158
|
+
* @param sceneData - The serialized environment data
|
|
159
|
+
*/
|
|
160
|
+
async deserialize(sceneData: EnvironmentSceneData): Promise<void> {
|
|
161
|
+
this.equirectangularTexture = sceneData.equirectangularTexture || this.equirectangularTexture;
|
|
162
|
+
this.irradianceIntensity = sceneData.irradianceIntensity || this.irradianceIntensity;
|
|
163
|
+
this.showSkybox = sceneData.showSkybox || this.showSkybox;
|
|
164
|
+
this.cubemapSize = sceneData.cubemapSize || this.cubemapSize;
|
|
165
|
+
this.irradianceMapSize = sceneData.irradianceMapSize || this.irradianceMapSize;
|
|
166
|
+
this.specularMapSize = sceneData.specularMapSize || this.specularMapSize;
|
|
167
|
+
this.specularMapL2Size = sceneData.specularMapL2Size || this.specularMapL2Size;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Serializes environment data to a scene data object
|
|
172
|
+
* @param sceneData - The object to populate with serialized data
|
|
173
|
+
*/
|
|
174
|
+
async serialize(sceneData: EnvironmentSceneData): Promise<void> {
|
|
175
|
+
sceneData.equirectangularTexture = this.equirectangularTexture;
|
|
176
|
+
sceneData.irradianceIntensity = this.irradianceIntensity;
|
|
177
|
+
sceneData.showSkybox = this.showSkybox;
|
|
178
|
+
sceneData.cubemapSize = this.cubemapSize;
|
|
179
|
+
sceneData.irradianceMapSize = this.irradianceMapSize;
|
|
180
|
+
sceneData.specularMapSize = this.specularMapSize;
|
|
181
|
+
sceneData.specularMapL2Size = this.specularMapL2Size;
|
|
182
|
+
}
|
|
183
|
+
}
|