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.
Files changed (148) hide show
  1. package/dist/bg2e-js.js +356 -326
  2. package/dist/bg2e-js.js.map +1 -1
  3. package/package.json +56 -56
  4. package/src/app/AppController.ts +39 -39
  5. package/src/app/Bg2KeyboardEvent.ts +54 -54
  6. package/src/app/Bg2MouseEvent.ts +82 -82
  7. package/src/app/Bg2TouchEvent.ts +18 -18
  8. package/src/app/Canvas.ts +108 -108
  9. package/src/app/EventBase.ts +10 -10
  10. package/src/app/MainLoop.ts +273 -273
  11. package/src/app/index.ts +24 -24
  12. package/src/base/Color.ts +134 -134
  13. package/src/base/Environment.ts +183 -183
  14. package/src/base/Light.ts +192 -192
  15. package/src/base/Material.ts +620 -620
  16. package/src/base/PolyList.ts +365 -365
  17. package/src/base/Texture.ts +620 -620
  18. package/src/base/index.ts +81 -81
  19. package/src/db/Bg2LoaderPlugin.ts +143 -143
  20. package/src/db/DBPluginApi.ts +48 -48
  21. package/src/db/Loader.ts +116 -116
  22. package/src/db/LoaderPlugin.ts +34 -34
  23. package/src/db/MtlParser.ts +7 -7
  24. package/src/db/ObjLoaderPlugin.ts +54 -54
  25. package/src/db/ObjParser.ts +252 -252
  26. package/src/db/ObjWriterPlugin.ts +18 -18
  27. package/src/db/VitscnjLoaderPlugin.ts +112 -112
  28. package/src/db/Writer.ts +52 -52
  29. package/src/db/WriterPlugin.ts +22 -22
  30. package/src/db/index.ts +44 -44
  31. package/src/debug/DebugRenderer.ts +173 -173
  32. package/src/debug/WebGLTextureViewer.ts +75 -75
  33. package/src/debug/index.ts +6 -6
  34. package/src/index.html +11 -11
  35. package/src/index.ts +33 -33
  36. package/src/manipulation/SelectionBuffer.ts +81 -81
  37. package/src/manipulation/SelectionHighlight.ts +105 -84
  38. package/src/manipulation/SelectionIdAssignVisitor.ts +96 -96
  39. package/src/manipulation/SelectionManager.ts +196 -188
  40. package/src/manipulation/SelectionMode.ts +6 -6
  41. package/src/math/Mat3.ts +259 -259
  42. package/src/math/Mat4.ts +710 -710
  43. package/src/math/MatrixStrategy.ts +25 -25
  44. package/src/math/Quat.ts +65 -65
  45. package/src/math/Vec.ts +753 -753
  46. package/src/math/constants.ts +46 -46
  47. package/src/math/functions.ts +103 -103
  48. package/src/math/index.ts +74 -74
  49. package/src/phsics/joint.ts +137 -137
  50. package/src/primitives/arrow.ts +57 -57
  51. package/src/primitives/cone.ts +138 -138
  52. package/src/primitives/cube.ts +60 -60
  53. package/src/primitives/cylinder.ts +216 -216
  54. package/src/primitives/index.ts +13 -13
  55. package/src/primitives/plane.ts +31 -31
  56. package/src/primitives/sphere.ts +809 -809
  57. package/src/react/useBg2e.ts +69 -69
  58. package/src/render/BRDFIntegrationMap.ts +4 -4
  59. package/src/render/Environment.ts +135 -135
  60. package/src/render/FrameBuffer.ts +35 -35
  61. package/src/render/MaterialRenderer.ts +34 -34
  62. package/src/render/Pipeline.ts +108 -108
  63. package/src/render/PolyListRenderer.ts +47 -47
  64. package/src/render/RenderBuffer.ts +197 -197
  65. package/src/render/RenderQueue.ts +198 -198
  66. package/src/render/RenderState.ts +116 -116
  67. package/src/render/Renderer.ts +248 -248
  68. package/src/render/SceneAppController.ts +250 -250
  69. package/src/render/SceneRenderer.ts +387 -387
  70. package/src/render/Shader.ts +32 -32
  71. package/src/render/ShadowRenderer.ts +176 -176
  72. package/src/render/SkyCube.ts +105 -105
  73. package/src/render/SkySphere.ts +117 -117
  74. package/src/render/TextureMergerRenderer.ts +70 -70
  75. package/src/render/TextureRenderer.ts +34 -34
  76. package/src/render/index.ts +67 -67
  77. package/src/render/webgl/FrameBuffer.ts +9 -9
  78. package/src/render/webgl/MaterialRenderer.ts +112 -112
  79. package/src/render/webgl/Pipeline.ts +88 -88
  80. package/src/render/webgl/PolyListRenderer.ts +260 -260
  81. package/src/render/webgl/RenderBuffer.ts +226 -226
  82. package/src/render/webgl/Renderer.ts +262 -262
  83. package/src/render/webgl/SceneRenderer.ts +67 -67
  84. package/src/render/webgl/ShaderProgram.ts +424 -424
  85. package/src/render/webgl/ShadowRenderer.ts +6 -6
  86. package/src/render/webgl/SkyCube.ts +15 -15
  87. package/src/render/webgl/SkySphere.ts +15 -15
  88. package/src/render/webgl/State.ts +152 -152
  89. package/src/render/webgl/TextureRenderer.ts +167 -167
  90. package/src/render/webgl/VertexBuffer.ts +137 -137
  91. package/src/render/webgl/index.ts +35 -35
  92. package/src/scene/Camera.ts +458 -458
  93. package/src/scene/Chain.ts +44 -44
  94. package/src/scene/ChainJoint.ts +58 -58
  95. package/src/scene/Component.ts +177 -177
  96. package/src/scene/ComponentMap.ts +106 -106
  97. package/src/scene/Drawable.ts +154 -154
  98. package/src/scene/EnvironmentComponent.ts +141 -141
  99. package/src/scene/FindNodeVisitor.ts +59 -59
  100. package/src/scene/LightComponent.ts +154 -154
  101. package/src/scene/MatrixState.ts +46 -46
  102. package/src/scene/Node.ts +328 -328
  103. package/src/scene/NodeVisitor.ts +15 -15
  104. package/src/scene/OrbitCameraController.ts +450 -450
  105. package/src/scene/SmoothOrbitCameraController.ts +99 -99
  106. package/src/scene/Transform.ts +73 -73
  107. package/src/scene/index.ts +60 -60
  108. package/src/shaders/BasicDiffuseColorShader.ts +111 -111
  109. package/src/shaders/BasicPBRLightShader.ts +276 -276
  110. package/src/shaders/DebugRenderShader.ts +97 -97
  111. package/src/shaders/DepthRenderShader.ts +127 -127
  112. package/src/shaders/IrradianceMapCubeShader.ts +115 -115
  113. package/src/shaders/PBRLightIBLShader.ts +486 -486
  114. package/src/shaders/PickSelectionShader.ts +101 -101
  115. package/src/shaders/PresentDebugFramebufferShader.ts +118 -118
  116. package/src/shaders/PresentTextureShader.ts +99 -99
  117. package/src/shaders/SelectionHighlightShader.ts +143 -127
  118. package/src/shaders/ShaderFunction.ts +318 -318
  119. package/src/shaders/SkyCubeShader.ts +93 -93
  120. package/src/shaders/SkySphereShader.ts +102 -102
  121. package/src/shaders/SpecularMapCubeShader.ts +164 -164
  122. package/src/shaders/TextureMergerShader.ts +171 -171
  123. package/src/shaders/index.ts +36 -36
  124. package/src/shaders/webgl/color_correction.glsl +47 -47
  125. package/src/shaders/webgl/constants.glsl +6 -6
  126. package/src/shaders/webgl/index.ts +70 -70
  127. package/src/shaders/webgl/normal_map.glsl +9 -9
  128. package/src/shaders/webgl/pbr.glsl +173 -173
  129. package/src/shaders/webgl/uniforms.glsl +91 -91
  130. package/src/shaders/webgl_shader_lib.ts +213 -213
  131. package/src/tools/BinaryResourceProvider.ts +14 -14
  132. package/src/tools/ImageResourceProvider.ts +66 -66
  133. package/src/tools/MaterialModifier.ts +446 -446
  134. package/src/tools/Resource.ts +203 -203
  135. package/src/tools/ResourceProvider.ts +69 -69
  136. package/src/tools/TextResourceProvider.ts +24 -24
  137. package/src/tools/TextureCache.ts +51 -51
  138. package/src/tools/TextureResourceDatabase.ts +100 -100
  139. package/src/tools/UserAgent.ts +362 -362
  140. package/src/tools/VideoResourceProvider.ts +50 -50
  141. package/src/tools/WriteStrategy.ts +22 -22
  142. package/src/tools/base64.ts +11 -11
  143. package/src/tools/crypto.ts +19 -19
  144. package/src/tools/endiantess.ts +13 -13
  145. package/src/tools/image.ts +18 -18
  146. package/src/tools/index.ts +41 -41
  147. package/src/tools/processType.ts +39 -39
  148. 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
+ }
@@ -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
+ }