bg2e-js 2.3.1 → 2.3.2
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 +326 -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 +82 -82
- package/src/manipulation/SelectionHighlight.ts +85 -85
- package/src/manipulation/SelectionIdAssignVisitor.ts +96 -96
- package/src/manipulation/SelectionManager.ts +166 -166
- 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 +75 -70
- 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 +247 -247
- package/src/render/SceneRenderer.ts +372 -372
- 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 +173 -173
- 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 +314 -314
- 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 +127 -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
|
@@ -1,94 +1,94 @@
|
|
|
1
|
-
import Mat4 from "../math/Mat4";
|
|
2
|
-
import PolyListRenderer from '../render/PolyListRenderer';
|
|
3
|
-
import MaterialRenderer from '../render/MaterialRenderer';
|
|
4
|
-
import Renderer from "../render/Renderer";
|
|
5
|
-
import WebGLRenderer from "../render/webgl/Renderer";
|
|
6
|
-
import Shader from "../render/Shader";
|
|
7
|
-
import ShaderProgram from "../render/webgl/ShaderProgram";
|
|
8
|
-
import WebGLTextureRenderer from "../render/webgl/TextureRenderer";
|
|
9
|
-
import WebGLPolyListRenderer from "../render/webgl/PolyListRenderer";
|
|
10
|
-
|
|
11
|
-
const g_code = {
|
|
12
|
-
webgl: {
|
|
13
|
-
vertex: `precision mediump float;
|
|
14
|
-
|
|
15
|
-
attribute vec3 vertPosition;
|
|
16
|
-
|
|
17
|
-
uniform mat4 uMVP;
|
|
18
|
-
|
|
19
|
-
varying vec3 fragNormal;
|
|
20
|
-
|
|
21
|
-
void main() {
|
|
22
|
-
gl_Position = uMVP * vec4(vertPosition,1.0);
|
|
23
|
-
|
|
24
|
-
// The normal can be extracted from the position
|
|
25
|
-
// since this shader is designed to be used with
|
|
26
|
-
// a cube centered in 0,0,0
|
|
27
|
-
fragNormal = normalize(vertPosition);
|
|
28
|
-
}
|
|
29
|
-
`,
|
|
30
|
-
|
|
31
|
-
fragment: `precision mediump float;
|
|
32
|
-
varying vec3 fragNormal;
|
|
33
|
-
|
|
34
|
-
uniform samplerCube uCubemap;
|
|
35
|
-
|
|
36
|
-
void main() {
|
|
37
|
-
gl_FragColor = textureCube(uCubemap, normalize(fragNormal));
|
|
38
|
-
}`
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
export default class SkyCubeShader extends Shader {
|
|
43
|
-
protected _program: ShaderProgram | null = null;
|
|
44
|
-
|
|
45
|
-
constructor(renderer: Renderer) {
|
|
46
|
-
super(renderer);
|
|
47
|
-
|
|
48
|
-
if (renderer.typeId !== "WebGL") {
|
|
49
|
-
throw Error("SkyCubeShader is only compatible with WebGL renderer");
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
async load() {
|
|
54
|
-
const { gl } = (this.renderer as WebGLRenderer);
|
|
55
|
-
|
|
56
|
-
this._program = new ShaderProgram(gl, "SkyCubeShader");
|
|
57
|
-
this._program.attachVertexSource(g_code.webgl.vertex);
|
|
58
|
-
this._program.attachFragmentSource(g_code.webgl.fragment);
|
|
59
|
-
this._program.link();
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
setup(
|
|
63
|
-
plistRenderer: PolyListRenderer,
|
|
64
|
-
materialRenderer: MaterialRenderer,
|
|
65
|
-
modelMatrix: Mat4,
|
|
66
|
-
viewMatrix: Mat4,
|
|
67
|
-
projectionMatrix: Mat4
|
|
68
|
-
) {
|
|
69
|
-
if (!this._program) {
|
|
70
|
-
throw new Error("SkyCubeShader: shader program is not loaded");
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const rend = this.renderer as WebGLRenderer;
|
|
74
|
-
const { gl } = rend;
|
|
75
|
-
rend.state.shaderProgram = this._program;
|
|
76
|
-
|
|
77
|
-
const mvp = Mat4.Mult(projectionMatrix, viewMatrix);
|
|
78
|
-
this._program.uniformMatrix4fv('uMVP', false, mvp);
|
|
79
|
-
|
|
80
|
-
gl.activeTexture(gl.TEXTURE0);
|
|
81
|
-
this._program.uniform1i('uCubemap', 0);
|
|
82
|
-
const webglTexture = (materialRenderer.getTextureRenderer('albedoTexture') as WebGLTextureRenderer)?.getApiObject();
|
|
83
|
-
gl.bindTexture(gl.TEXTURE_CUBE_MAP, webglTexture);
|
|
84
|
-
|
|
85
|
-
this._program.positionAttribPointer((plistRenderer as WebGLPolyListRenderer).positionAttribParams("vertPosition"));
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
destroy() {
|
|
89
|
-
if (this._program) {
|
|
90
|
-
ShaderProgram.Delete(this._program);
|
|
91
|
-
this._program = null;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
1
|
+
import Mat4 from "../math/Mat4";
|
|
2
|
+
import PolyListRenderer from '../render/PolyListRenderer';
|
|
3
|
+
import MaterialRenderer from '../render/MaterialRenderer';
|
|
4
|
+
import Renderer from "../render/Renderer";
|
|
5
|
+
import WebGLRenderer from "../render/webgl/Renderer";
|
|
6
|
+
import Shader from "../render/Shader";
|
|
7
|
+
import ShaderProgram from "../render/webgl/ShaderProgram";
|
|
8
|
+
import WebGLTextureRenderer from "../render/webgl/TextureRenderer";
|
|
9
|
+
import WebGLPolyListRenderer from "../render/webgl/PolyListRenderer";
|
|
10
|
+
|
|
11
|
+
const g_code = {
|
|
12
|
+
webgl: {
|
|
13
|
+
vertex: `precision mediump float;
|
|
14
|
+
|
|
15
|
+
attribute vec3 vertPosition;
|
|
16
|
+
|
|
17
|
+
uniform mat4 uMVP;
|
|
18
|
+
|
|
19
|
+
varying vec3 fragNormal;
|
|
20
|
+
|
|
21
|
+
void main() {
|
|
22
|
+
gl_Position = uMVP * vec4(vertPosition,1.0);
|
|
23
|
+
|
|
24
|
+
// The normal can be extracted from the position
|
|
25
|
+
// since this shader is designed to be used with
|
|
26
|
+
// a cube centered in 0,0,0
|
|
27
|
+
fragNormal = normalize(vertPosition);
|
|
28
|
+
}
|
|
29
|
+
`,
|
|
30
|
+
|
|
31
|
+
fragment: `precision mediump float;
|
|
32
|
+
varying vec3 fragNormal;
|
|
33
|
+
|
|
34
|
+
uniform samplerCube uCubemap;
|
|
35
|
+
|
|
36
|
+
void main() {
|
|
37
|
+
gl_FragColor = textureCube(uCubemap, normalize(fragNormal));
|
|
38
|
+
}`
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export default class SkyCubeShader extends Shader {
|
|
43
|
+
protected _program: ShaderProgram | null = null;
|
|
44
|
+
|
|
45
|
+
constructor(renderer: Renderer) {
|
|
46
|
+
super(renderer);
|
|
47
|
+
|
|
48
|
+
if (renderer.typeId !== "WebGL") {
|
|
49
|
+
throw Error("SkyCubeShader is only compatible with WebGL renderer");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async load() {
|
|
54
|
+
const { gl } = (this.renderer as WebGLRenderer);
|
|
55
|
+
|
|
56
|
+
this._program = new ShaderProgram(gl, "SkyCubeShader");
|
|
57
|
+
this._program.attachVertexSource(g_code.webgl.vertex);
|
|
58
|
+
this._program.attachFragmentSource(g_code.webgl.fragment);
|
|
59
|
+
this._program.link();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
setup(
|
|
63
|
+
plistRenderer: PolyListRenderer,
|
|
64
|
+
materialRenderer: MaterialRenderer,
|
|
65
|
+
modelMatrix: Mat4,
|
|
66
|
+
viewMatrix: Mat4,
|
|
67
|
+
projectionMatrix: Mat4
|
|
68
|
+
) {
|
|
69
|
+
if (!this._program) {
|
|
70
|
+
throw new Error("SkyCubeShader: shader program is not loaded");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const rend = this.renderer as WebGLRenderer;
|
|
74
|
+
const { gl } = rend;
|
|
75
|
+
rend.state.shaderProgram = this._program;
|
|
76
|
+
|
|
77
|
+
const mvp = Mat4.Mult(projectionMatrix, viewMatrix);
|
|
78
|
+
this._program.uniformMatrix4fv('uMVP', false, mvp);
|
|
79
|
+
|
|
80
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
81
|
+
this._program.uniform1i('uCubemap', 0);
|
|
82
|
+
const webglTexture = (materialRenderer.getTextureRenderer('albedoTexture') as WebGLTextureRenderer)?.getApiObject();
|
|
83
|
+
gl.bindTexture(gl.TEXTURE_CUBE_MAP, webglTexture);
|
|
84
|
+
|
|
85
|
+
this._program.positionAttribPointer((plistRenderer as WebGLPolyListRenderer).positionAttribParams("vertPosition"));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
destroy() {
|
|
89
|
+
if (this._program) {
|
|
90
|
+
ShaderProgram.Delete(this._program);
|
|
91
|
+
this._program = null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
94
|
}
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import Shader from "../render/Shader";
|
|
2
|
-
import ShaderProgram from "../render/webgl/ShaderProgram";
|
|
3
|
-
import { TextureTargetName } from "../base/Texture";
|
|
4
|
-
import PolyListRenderer from '../render/PolyListRenderer';
|
|
5
|
-
import MaterialRenderer from '../render/MaterialRenderer';
|
|
6
|
-
import Mat4 from "../math/Mat4";
|
|
7
|
-
import Renderer from "../render/Renderer";
|
|
8
|
-
import WebGLRenderer from "../render/webgl/Renderer";
|
|
9
|
-
import WebGLTextureRenderer from "../render/webgl/TextureRenderer";
|
|
10
|
-
import WebGLPolyListRenderer from "../render/webgl/PolyListRenderer";
|
|
11
|
-
|
|
12
|
-
const g_code = {
|
|
13
|
-
webgl: {
|
|
14
|
-
vertex: `precision mediump float;
|
|
15
|
-
|
|
16
|
-
attribute vec3 vertPosition;
|
|
17
|
-
attribute vec2 t0Position;
|
|
18
|
-
|
|
19
|
-
varying vec2 fragT0Pos;
|
|
20
|
-
|
|
21
|
-
uniform mat4 mView;
|
|
22
|
-
uniform mat4 mProj;
|
|
23
|
-
|
|
24
|
-
void main() {
|
|
25
|
-
fragT0Pos = t0Position;
|
|
26
|
-
gl_Position = mProj * mView * vec4(vertPosition, 1.0);
|
|
27
|
-
}`,
|
|
28
|
-
|
|
29
|
-
fragment: `precision mediump float;
|
|
30
|
-
|
|
31
|
-
varying vec2 fragT0Pos;
|
|
32
|
-
|
|
33
|
-
uniform sampler2D uTexture;
|
|
34
|
-
|
|
35
|
-
void main() {
|
|
36
|
-
vec4 texColor = texture2D(uTexture, fragT0Pos);
|
|
37
|
-
gl_FragColor = vec4(texColor.rgb, 1.0);
|
|
38
|
-
}`
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
export default class SkySphereShader extends Shader {
|
|
43
|
-
protected _program: ShaderProgram | null = null;
|
|
44
|
-
|
|
45
|
-
constructor(renderer: Renderer) {
|
|
46
|
-
super(renderer);
|
|
47
|
-
|
|
48
|
-
if (renderer.typeId !== "WebGL") {
|
|
49
|
-
throw Error("SkySphereShader is only compatible with WebGL renderer");
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
async load() {
|
|
54
|
-
const { gl } = (this.renderer as WebGLRenderer);
|
|
55
|
-
this._program = new ShaderProgram(gl, "SkySphereShader");
|
|
56
|
-
this._program.attachVertexSource(g_code.webgl.vertex);
|
|
57
|
-
this._program.attachFragmentSource(g_code.webgl.fragment);
|
|
58
|
-
this._program.link();
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
setup(
|
|
62
|
-
plistRenderer: PolyListRenderer,
|
|
63
|
-
materialRenderer: MaterialRenderer,
|
|
64
|
-
modelMatrix: Mat4,
|
|
65
|
-
viewMatrix: Mat4,
|
|
66
|
-
projectionMatrix: Mat4
|
|
67
|
-
) {
|
|
68
|
-
if (!this._program) {
|
|
69
|
-
throw new Error("SkySphereShader: shader program is not loaded");
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const { material } = materialRenderer;
|
|
74
|
-
if (!material.albedoTexture) {
|
|
75
|
-
throw new Error("SkySphereShader: material does not have an albedo texture");
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const rend = this.renderer as WebGLRenderer;
|
|
79
|
-
const { gl } = rend;
|
|
80
|
-
rend.state.shaderProgram = this._program;
|
|
81
|
-
|
|
82
|
-
this._program.uniformMatrix4fv('mView', false, viewMatrix);
|
|
83
|
-
this._program.uniformMatrix4fv('mProj', false, projectionMatrix);
|
|
84
|
-
|
|
85
|
-
gl.activeTexture(gl.TEXTURE0);
|
|
86
|
-
this._program.uniform1i('uTexture', 0);
|
|
87
|
-
|
|
88
|
-
const webglTexture = (materialRenderer.getTextureRenderer('albedoTexture') as WebGLTextureRenderer)?.getApiObject();
|
|
89
|
-
const target = TextureTargetName[material.albedoTexture.target];
|
|
90
|
-
gl.bindTexture((gl as any)[target], webglTexture);
|
|
91
|
-
|
|
92
|
-
this._program.positionAttribPointer((plistRenderer as WebGLPolyListRenderer).positionAttribParams("vertPosition"));
|
|
93
|
-
this._program.texCoordAttribPointer((plistRenderer as WebGLPolyListRenderer).texCoord0AttribParams("t0Position"));
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
destroy() {
|
|
97
|
-
if (this._program) {
|
|
98
|
-
ShaderProgram.Delete(this._program);
|
|
99
|
-
this._program = null;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
1
|
+
import Shader from "../render/Shader";
|
|
2
|
+
import ShaderProgram from "../render/webgl/ShaderProgram";
|
|
3
|
+
import { TextureTargetName } from "../base/Texture";
|
|
4
|
+
import PolyListRenderer from '../render/PolyListRenderer';
|
|
5
|
+
import MaterialRenderer from '../render/MaterialRenderer';
|
|
6
|
+
import Mat4 from "../math/Mat4";
|
|
7
|
+
import Renderer from "../render/Renderer";
|
|
8
|
+
import WebGLRenderer from "../render/webgl/Renderer";
|
|
9
|
+
import WebGLTextureRenderer from "../render/webgl/TextureRenderer";
|
|
10
|
+
import WebGLPolyListRenderer from "../render/webgl/PolyListRenderer";
|
|
11
|
+
|
|
12
|
+
const g_code = {
|
|
13
|
+
webgl: {
|
|
14
|
+
vertex: `precision mediump float;
|
|
15
|
+
|
|
16
|
+
attribute vec3 vertPosition;
|
|
17
|
+
attribute vec2 t0Position;
|
|
18
|
+
|
|
19
|
+
varying vec2 fragT0Pos;
|
|
20
|
+
|
|
21
|
+
uniform mat4 mView;
|
|
22
|
+
uniform mat4 mProj;
|
|
23
|
+
|
|
24
|
+
void main() {
|
|
25
|
+
fragT0Pos = t0Position;
|
|
26
|
+
gl_Position = mProj * mView * vec4(vertPosition, 1.0);
|
|
27
|
+
}`,
|
|
28
|
+
|
|
29
|
+
fragment: `precision mediump float;
|
|
30
|
+
|
|
31
|
+
varying vec2 fragT0Pos;
|
|
32
|
+
|
|
33
|
+
uniform sampler2D uTexture;
|
|
34
|
+
|
|
35
|
+
void main() {
|
|
36
|
+
vec4 texColor = texture2D(uTexture, fragT0Pos);
|
|
37
|
+
gl_FragColor = vec4(texColor.rgb, 1.0);
|
|
38
|
+
}`
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export default class SkySphereShader extends Shader {
|
|
43
|
+
protected _program: ShaderProgram | null = null;
|
|
44
|
+
|
|
45
|
+
constructor(renderer: Renderer) {
|
|
46
|
+
super(renderer);
|
|
47
|
+
|
|
48
|
+
if (renderer.typeId !== "WebGL") {
|
|
49
|
+
throw Error("SkySphereShader is only compatible with WebGL renderer");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async load() {
|
|
54
|
+
const { gl } = (this.renderer as WebGLRenderer);
|
|
55
|
+
this._program = new ShaderProgram(gl, "SkySphereShader");
|
|
56
|
+
this._program.attachVertexSource(g_code.webgl.vertex);
|
|
57
|
+
this._program.attachFragmentSource(g_code.webgl.fragment);
|
|
58
|
+
this._program.link();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
setup(
|
|
62
|
+
plistRenderer: PolyListRenderer,
|
|
63
|
+
materialRenderer: MaterialRenderer,
|
|
64
|
+
modelMatrix: Mat4,
|
|
65
|
+
viewMatrix: Mat4,
|
|
66
|
+
projectionMatrix: Mat4
|
|
67
|
+
) {
|
|
68
|
+
if (!this._program) {
|
|
69
|
+
throw new Error("SkySphereShader: shader program is not loaded");
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
const { material } = materialRenderer;
|
|
74
|
+
if (!material.albedoTexture) {
|
|
75
|
+
throw new Error("SkySphereShader: material does not have an albedo texture");
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const rend = this.renderer as WebGLRenderer;
|
|
79
|
+
const { gl } = rend;
|
|
80
|
+
rend.state.shaderProgram = this._program;
|
|
81
|
+
|
|
82
|
+
this._program.uniformMatrix4fv('mView', false, viewMatrix);
|
|
83
|
+
this._program.uniformMatrix4fv('mProj', false, projectionMatrix);
|
|
84
|
+
|
|
85
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
86
|
+
this._program.uniform1i('uTexture', 0);
|
|
87
|
+
|
|
88
|
+
const webglTexture = (materialRenderer.getTextureRenderer('albedoTexture') as WebGLTextureRenderer)?.getApiObject();
|
|
89
|
+
const target = TextureTargetName[material.albedoTexture.target];
|
|
90
|
+
gl.bindTexture((gl as any)[target], webglTexture);
|
|
91
|
+
|
|
92
|
+
this._program.positionAttribPointer((plistRenderer as WebGLPolyListRenderer).positionAttribParams("vertPosition"));
|
|
93
|
+
this._program.texCoordAttribPointer((plistRenderer as WebGLPolyListRenderer).texCoord0AttribParams("t0Position"));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
destroy() {
|
|
97
|
+
if (this._program) {
|
|
98
|
+
ShaderProgram.Delete(this._program);
|
|
99
|
+
this._program = null;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|